Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 May 2009 13:04:54 GMT
From:      Sylvestre Gallon <syl@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 163081 for review
Message-ID:  <200905301304.n4UD4sQG041290@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=163081

Change 163081 by syl@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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905301304.n4UD4sQG041290>