[PD-cvs] externals/io/hidio hidio.c,1.7,1.8
Olaf Matthes
olafmatt at users.sourceforge.net
Sat Dec 2 01:24:53 CET 2006
Update of /cvsroot/pure-data/externals/io/hidio
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20484
Modified Files:
hidio.c
Log Message:
added more mutexes for thread safe operation, renamed hidio_read to hidio_child_read because it get's called by child thread
Index: hidio.c
===================================================================
RCS file: /cvsroot/pure-data/externals/io/hidio/hidio.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** hidio.c 1 Dec 2006 19:40:46 -0000 1.7
--- hidio.c 2 Dec 2006 00:24:51 -0000 1.8
***************
*** 73,77 ****
static void hidio_open(t_hidio *x, t_symbol *s, int argc, t_atom *argv);
//static t_int hidio_close(t_hidio *x);
! //static t_int hidio_read(t_hidio *x);
//static void hidio_float(t_hidio* x, t_floatarg f);
--- 73,77 ----
static void hidio_open(t_hidio *x, t_symbol *s, int argc, t_atom *argv);
//static t_int hidio_close(t_hidio *x);
! //static t_int hidio_child_read(t_hidio *x);
//static void hidio_float(t_hidio* x, t_floatarg f);
***************
*** 289,292 ****
--- 289,293 ----
debug_print(LOG_DEBUG,"stop_poll");
+ pthread_mutex_lock(&x->x_mutex);
if (x->x_started)
{
***************
*** 295,298 ****
--- 296,300 ----
x->x_started = 0;
}
+ pthread_mutex_unlock(&x->x_mutex);
}
***************
*** 304,307 ****
--- 306,310 ----
void hidio_poll(t_hidio* x, t_float f)
{
+ pthread_mutex_lock(&x->x_mutex);
debug_print(LOG_DEBUG,"hidio_poll");
***************
*** 313,318 ****
if(x->x_device_number > -1)
{
! if(!x->x_device_open)
hidio_open(x,ps_open,0,NULL);
if(!x->x_started)
{
--- 316,325 ----
if(x->x_device_number > -1)
{
! if(!x->x_device_open)
! {
! pthread_mutex_unlock(&x->x_mutex);
hidio_open(x,ps_open,0,NULL);
+ pthread_mutex_lock(&x->x_mutex);
+ }
if(!x->x_started)
{
***************
*** 322,329 ****
--- 329,338 ----
}
}
+ pthread_mutex_unlock(&x->x_mutex);
}
static void hidio_set_from_float(t_hidio *x, t_floatarg f)
{
+ pthread_mutex_lock(&x->x_mutex);
/* values greater than 1 set the polling delay time */
/* 1 and 0 for start/stop so you can use a [tgl] */
***************
*** 331,345 ****
--- 340,363 ----
{
x->x_delay = (t_int)f;
+ pthread_mutex_unlock(&x->x_mutex);
hidio_poll(x,f);
+ pthread_mutex_lock(&x->x_mutex);
}
else if(f == 1)
{
if(! x->x_started)
+ {
+ pthread_mutex_unlock(&x->x_mutex);
hidio_poll(x,f);
+ pthread_mutex_lock(&x->x_mutex);
+ }
}
else if(f == 0)
{
+ pthread_mutex_unlock(&x->x_mutex);
stop_poll(x);
+ pthread_mutex_lock(&x->x_mutex);
}
+ pthread_mutex_unlock(&x->x_mutex);
}
***************
*** 388,394 ****
! t_int hidio_read(t_hidio *x)
{
! // debug_print(LOG_DEBUG,"hidio_read");
unsigned int i;
#ifdef PD
--- 406,413 ----
! /* read from event queue, called from child thread, no mutex needed */
! t_int hidio_child_read(t_hidio *x)
{
! // debug_print(LOG_DEBUG,"hidio_child_read");
unsigned int i;
#ifdef PD
***************
*** 517,521 ****
{
pthread_mutex_unlock(&x->x_mutex);
! hidio_read(x);
pthread_mutex_lock(&x->x_mutex);
if (x->x_requestcode == REQUEST_READ)
--- 536,540 ----
{
pthread_mutex_unlock(&x->x_mutex);
! hidio_child_read(x);
pthread_mutex_lock(&x->x_mutex);
if (x->x_requestcode == REQUEST_READ)
***************
*** 652,668 ****
unsigned int i;
! /* init vars */
! global_debug_level = 9; /* high numbers here means see more messages */
! x->x_has_ff = 0;
! x->x_device_open = 0;
! x->x_started = 0;
! x->x_delay = DEFAULT_DELAY;
! for(i=0; i<MAX_DEVICES; ++i) last_execute_time[i] = 0;
! x->x_clock = clock_new(x, (method)hidio_tick);
! /* create anything outlet used for HID data */
! x->x_status_outlet = outlet_new(x, "anything");
! x->x_data_outlet = outlet_new(x, "anything");
#endif
--- 671,687 ----
unsigned int i;
! /* init vars */
! global_debug_level = 9; /* high numbers here means see more messages */
! x->x_has_ff = 0;
! x->x_device_open = 0;
! x->x_started = 0;
! x->x_delay = DEFAULT_DELAY;
! for(i=0; i<MAX_DEVICES; ++i) last_execute_time[i] = 0;
! x->x_clock = clock_new(x, (method)hidio_tick);
! /* create anything outlet used for HID data */
! x->x_status_outlet = outlet_new(x, "anything");
! x->x_data_outlet = outlet_new(x, "anything");
#endif
***************
*** 671,683 ****
pthread_cond_init(&x->x_answercondition, 0);
! x->x_device_number = get_device_number_from_arguments(argc, argv);
! x->x_instance = hidio_instance_count;
! hidio_instance_count++;
x->x_requestcode = REQUEST_NOTHING;
pthread_create(&x->x_thread, 0, hidio_child, x);
! return (x);
}
--- 690,702 ----
pthread_cond_init(&x->x_answercondition, 0);
! x->x_device_number = get_device_number_from_arguments(argc, argv);
! x->x_instance = hidio_instance_count;
! hidio_instance_count++;
x->x_requestcode = REQUEST_NOTHING;
pthread_create(&x->x_thread, 0, hidio_child, x);
! return (x);
}
More information about the Pd-cvs
mailing list