Ejemplo n.º 1
0
static int stop(sox_effect_t * effp)
{
  priv_t * p = (priv_t *) effp->priv;

  fifo_delete(&p->input_fifo);
  fifo_delete(&p->output_fifo);
  free(p->filter_ptr->coefs);
  memset(p->filter_ptr, 0, sizeof(*p->filter_ptr));
  return SOX_SUCCESS;
}
Ejemplo n.º 2
0
int rtapi_exit(int module_id)
{
    module_data *module;
    int n;

    if (rtapi_data == NULL) {
	rtapi_print_msg(RTAPI_MSG_ERR,
	    "RTAPI: ERROR: exit called before init\n");
	return -EINVAL;
    }
    rtapi_print_msg(RTAPI_MSG_DBG, "RTAPI: module %02d exiting\n", module_id);
    /* validate module ID */
    if ((module_id < 1) || (module_id > RTAPI_MAX_MODULES)) {
	rtapi_print_msg(RTAPI_MSG_ERR, "RTAPI: ERROR: bad module id\n");
	return -EINVAL;
    }
    /* get mutex */
    rtapi_mutex_get(&(rtapi_data->mutex));
    /* point to the module's data */
    module = &(module_array[module_id]);
    /* check module status */
    if (module->state != USERSPACE) {
	rtapi_print_msg(RTAPI_MSG_ERR,
	    "RTAPI: ERROR: not a userspace module\n");
	rtapi_mutex_give(&(rtapi_data->mutex));
	return -EINVAL;
    }
    /* clean up any mess left behind by the module */
    for (n = 1; n <= RTAPI_MAX_SHMEMS; n++) {
	if (test_bit(module_id, shmem_array[n].bitmap)) {
	    fprintf(stderr,
		"ULAPI: WARNING: module '%s' failed to delete shmem %02d\n",
		module->name, n);
	    shmem_delete(n, module_id);
	}
    }
    for (n = 1; n <= RTAPI_MAX_FIFOS; n++) {
	if ((fifo_array[n].reader == module_id) ||
	    (fifo_array[n].writer == module_id)) {
	    fprintf(stderr,
		"ULAPI: WARNING: module '%s' failed to delete fifo %02d\n",
		module->name, n);
	    fifo_delete(n, module_id);
	}
    }
    /* update module data */
    rtapi_print_msg(RTAPI_MSG_DBG, "RTAPI: module %02d exited, name = '%s'\n",
	module_id, module->name);
    module->state = NO_MODULE;
    module->name[0] = '\0';
    rtapi_data->ul_module_count--;
    rtapi_mutex_give(&(rtapi_data->mutex));
    nummods--;
    if(nummods == 0)
    {
	rtai_free(RTAPI_KEY, rtapi_data);
	rtapi_data = 0;
    }
    return 0;
}
Ejemplo n.º 3
0
void server_run(server_context_t *c, void *(*popper_thread)(void *))
{
  fifo_init(&c->fifo, c->fifo_size_in_bits, c->fifo_packet_size_in_bits);
  c->server_thread_arg.fifo = &c->fifo;
  c->popper_thread_arg.fifo = &c->fifo;
  c->server_thread_arg.max_packet_size = 1 << c->fifo_packet_size_in_bits;
  c->popper_thread_arg.max_packet_size = 1 << c->fifo_packet_size_in_bits;
  c->server_thread_arg.sleep_usec = c->sleep_usec;
  c->popper_thread_arg.sleep_usec = c->sleep_usec;
  c->server_thread_arg.max_mbps = c->max_mbps;
  c->popper_thread_arg.max_mbps = c->max_mbps;

  socket_open(c);

  pthread_create(&c->server_th, NULL, (void* (*)(void*))server_thread, &c->server_thread_arg);

  pthread_create(&c->popper_th, NULL, popper_thread, &c->popper_thread_arg);

  pthread_join(c->popper_th, NULL);
#ifdef __ANDROID__
  // this is wrong, but android has no pthread_cancel
  // see stack overflow for a better solution that uses a SIGUSR1 handler
  // that I don't have time to implement right now
  // http://stackoverflow.com/questions/4610086/pthread-cancel-alternatives-in-android-ndk
  // pthread_kill(c->server_th, SIGUSR1);
#else
  pthread_cancel(c->server_th);
#endif

  socket_close(c);
  fifo_delete(&c->fifo);
}
Ejemplo n.º 4
0
int rtapi_fifo_delete(int fifo_id, int module_id)
{
    int retval;

    rtapi_mutex_get(&(rtapi_data->mutex));
    retval = fifo_delete(fifo_id, module_id);
    rtapi_mutex_give(&(rtapi_data->mutex));
    return retval;
}
Ejemplo n.º 5
0
int main()
{
    struct fifo * list = fifo_create_thread_safe_fifo();
    int i = 0;

    /*pop empty queue*/
    fifo_pop(list);

    printf("length: %d\n",fifo_length(list));
    
    for(;i<10;i++)
    {
        fifo_push(list,(void*)i);
    }

    printf("length: %d\n",fifo_length(list));

    for(i=0;i<5;i++)
    {
        printf("%d\n",(int)fifo_pop(list));
    }

    printf("length: %d\n",fifo_length(list));

    for(i=0;i<2;i++)
    {
        fifo_push(list,(void*)(i+10));
    }

    printf("length: %d\n",fifo_length(list));
        
    for(i=0;i<7;i++)
    {
        printf("%d\n",(int)fifo_pop(list));
    }
    
    printf("length: %d\n",fifo_length(list));

    for(i=0;i<2;i++)
    {
        fifo_push(list,(void*)(i+10));
    }

    printf("length: %d\n",fifo_length(list));
    
    for(i=0;i<2;i++)
    {
        printf("%d\n",(int)fifo_pop(list));
    }

    printf("length: %d\n",fifo_length(list));
    fifo_delete(list,NULL);
}
Ejemplo n.º 6
0
static bool __fifo_elem_cleaner(struct list_t *e)
{
    struct __fifo_elem_t *p;
    list_downcast(p,e);

    if(p->fifo) {
        fifo_delete(p->fifo);
    }

    FREE(p);

    return true;
}
static void
fifo_close(struct fifo_data *fd)
{
	struct stat st;

	if (fd->input >= 0) {
		close(fd->input);
		fd->input = -1;
	}

	if (fd->output >= 0) {
		close(fd->output);
		fd->output = -1;
	}

	if (fd->created && (stat(fd->path, &st) == 0))
		fifo_delete(fd);
}