PERFORCE change 163081 for review
Sylvestre Gallon
syl at FreeBSD.org
Sat May 30 13:04:56 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163081
Change 163081 by syl at syl_rincewind on 2009/05/30 13:04:04
Add libusb20_lock for libusb20 atomic functions.
Release the default_context_lock on libusb_init.
Affected files ...
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#21 edit
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.h#4 edit
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#5 edit
Differences ...
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#21 (text+ko) ====
@@ -46,6 +46,7 @@
static pthread_mutex_t default_context_lock = PTHREAD_MUTEX_INITIALIZER;
struct libusb_context *usbi_default_context = NULL;
+pthread_mutex_t libusb20_lock = PTHREAD_MUTEX_INITIALIZER;
/* Library initialisation / deinitialisation */
@@ -114,6 +115,7 @@
if (!usbi_default_context) {
usbi_default_context = ctx;
}
+ pthread_mutex_unlock(&default_context_lock);
if (context)
*context = ctx;
@@ -773,7 +775,10 @@
libusb20_tr_set_priv_sc0(usb20_xfer, xfer->callback);
libusb20_tr_set_priv_sc1(usb20_xfer, xfer->user_data);
libusb20_tr_set_callback(usb20_xfer, libusb10_proxy);
+
+ pthread_mutex_lock(&libusb20_lock);
libusb20_tr_submit(usb20_xfer);
+ pthread_mutex_unlock(&libusb20_lock);
switch (libusb20_tr_get_status(usb20_xfer)) {
case LIBUSB20_TRANSFER_COMPLETED:
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.h#4 (text+ko) ====
@@ -73,6 +73,7 @@
static int handle_timeouts(struct libusb_context *ctx);
static int handle_events(struct libusb_context *ctx, struct timeval *tv);
extern struct libusb_context *usbi_default_context;
+extern pthread_mutex_t libusb20_lock;
/* if ctx is NULL use default context*/
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#5 (text+ko) ====
@@ -187,7 +187,11 @@
usb_handle_disconnect(devh);
continue ;
}
+
+ pthread_mutex_lock(&libusb20_lock);
ret = libusb20_dev_process(devh->os_priv);
+ pthread_mutex_unlock(&libusb20_lock);
+
if (ret == 0 || LIBUSB20_ERROR_NO_DEVICE)
continue;
else if (ret < 0)
More information about the p4-projects
mailing list