summaryrefslogtreecommitdiff
path: root/core/libusbx
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2013-10-08 22:20:37 -0300
committerNicolás Reynolds <fauno@endefensadelsl.org>2013-10-08 22:20:37 -0300
commitfccf9769e2c26f577f6214ed9d0dbb30cb8c51bd (patch)
treecc5312eeed95e18d8e2c6009c568f3d32501bc01 /core/libusbx
parent69962c022fb4ed68b9163e60183fff714308e4e3 (diff)
parent3a0ad5dc35d5cff379cdfc736b9cae856416fe6a (diff)
Merge branch 'master' of ssh://vparabola/home/parabola/abslibre-pre-mips64el
Conflicts: community/abe/PKGBUILD community/account-plugins/PKGBUILD community/adesklets/PKGBUILD community/aircrack-ng/PKGBUILD community/audit/PKGBUILD community/bchunk/PKGBUILD community/bibutils/PKGBUILD community/cantata/PKGBUILD community/cdck/PKGBUILD community/cinnamon-control-center/PKGBUILD community/clusterssh/PKGBUILD community/consonance/PKGBUILD community/credentials-preferences/PKGBUILD community/dee/PKGBUILD community/dosbox/PKGBUILD community/drbd/PKGBUILD community/dvdisaster/PKGBUILD community/ekg/PKGBUILD community/ekg2/PKGBUILD community/emelfm2/PKGBUILD community/erlang/PKGBUILD community/ettercap/PKGBUILD community/evilwm/PKGBUILD community/fatrat/PKGBUILD community/fcitx-mozc/PKGBUILD community/fcrackzip/PKGBUILD community/ffmpegsource/PKGBUILD community/fssos-nsvs/PKGBUILD community/geda-gaf/PKGBUILD community/gnome-applets/PKGBUILD community/gnome-panel/PKGBUILD community/gnustep-make/PKGBUILD community/gwibber/PKGBUILD community/html2text/PKGBUILD community/intellij-idea-libs/PKGBUILD community/libcgns2/PKGBUILD community/libmatio/PKGBUILD community/librcc/PKGBUILD community/libsignon-glib/PKGBUILD community/linux-tools/PKGBUILD community/minitube/PKGBUILD community/mpdscribble/PKGBUILD community/mplayer2/PKGBUILD community/musepack-tools/PKGBUILD community/nginx/PKGBUILD community/pam_pwcheck/PKGBUILD community/portaudio/PKGBUILD community/portaudio_cpp/PKGBUILD community/prelink/PKGBUILD community/projectm/PKGBUILD community/prosody/PKGBUILD community/python-basemap/PKGBUILD community/qgit/PKGBUILD community/raptor1/PKGBUILD community/sensors-applet/PKGBUILD community/signon-keyring-extension/PKGBUILD community/signon-plugin-oauth2/PKGBUILD community/signon-ui/PKGBUILD community/sshguard/PKGBUILD community/tea/PKGBUILD community/tint2/PKGBUILD community/tremulous/PKGBUILD community/vobcopy/PKGBUILD community/windowlab/PKGBUILD community/xdelta/PKGBUILD community/xmms2/PKGBUILD community/xosd/PKGBUILD core/gdbm/PKGBUILD core/heirloom-mailx/PKGBUILD core/libffi/PKGBUILD core/procps-ng/PKGBUILD core/systemd/PKGBUILD core/tar/PKGBUILD cross/mips64el-unknown-linux-gnu-linux-libre-api-headers/PKGBUILD extra/arj/PKGBUILD extra/audacity/PKGBUILD extra/cdparanoia/PKGBUILD extra/elfutils/PKGBUILD extra/fltk/PKGBUILD extra/gnome-python-desktop/PKGBUILD extra/gstreamer/PKGBUILD extra/gtk2/PKGBUILD extra/gvfs/PKGBUILD extra/imagemagick/PKGBUILD extra/indent/PKGBUILD extra/kdepim/PKGBUILD extra/lcms/PKGBUILD extra/lesstif/PKGBUILD extra/libchewing/PKGBUILD extra/libdrm/PKGBUILD extra/libmodplug/PKGBUILD extra/libnotify/PKGBUILD extra/libsm/PKGBUILD extra/libxmu/PKGBUILD extra/libxpm/PKGBUILD extra/mariadb/PKGBUILD extra/mesa/PKGBUILD extra/mkvtoolnix/PKGBUILD extra/neon/PKGBUILD extra/ocaml/PKGBUILD extra/phonon-vlc/PKGBUILD extra/php-xcache/PKGBUILD extra/polkit/PKGBUILD extra/pycups/PKGBUILD extra/python-cairo/PKGBUILD extra/python/PKGBUILD extra/ruby/PKGBUILD extra/sqlite/PKGBUILD extra/talloc/PKGBUILD extra/thunar-archive-plugin/PKGBUILD extra/totem-plparser/PKGBUILD extra/totem/PKGBUILD extra/vinagre/PKGBUILD extra/vino/PKGBUILD extra/vlc/PKGBUILD extra/wget/PKGBUILD extra/xine-lib/PKGBUILD extra/xorg-server/PKGBUILD extra/xorg-twm/PKGBUILD extra/xorg-xclipboard/PKGBUILD extra/xorg-xclock/PKGBUILD extra/xorg-xkill/PKGBUILD extra/xorg-xlsclients/PKGBUILD extra/xorg-xman/PKGBUILD extra/xorg-xrdb/PKGBUILD extra/xpdf/PKGBUILD extra/xvidcore/PKGBUILD extra/yelp/PKGBUILD libre/audacious-plugins-libre/PKGBUILD libre/mc-libre/PKGBUILD libre/python2-reportlab-libre/PKGBUILD
Diffstat (limited to 'core/libusbx')
-rw-r--r--core/libusbx/0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch103
-rw-r--r--core/libusbx/0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch141
-rw-r--r--core/libusbx/PKGBUILD20
3 files changed, 5 insertions, 259 deletions
diff --git a/core/libusbx/0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch b/core/libusbx/0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch
deleted file mode 100644
index b66abd48f..000000000
--- a/core/libusbx/0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From daf4c9fadaf8a49198c53c039bf78980dc251a4b Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Tue, 30 Jul 2013 15:57:16 +0200
-Subject: [PATCH 1/2] linux: Use a separate lock to serialize start/stop vs
- hotplug events
-
-Using one lock for this is a bad idea, as we should not be holding any
-locks used by the hotplug thread when trying to stop otherwise the stop
-function may wait indefinetely in pthread_join, while the event-thread
-is waiting for the lock the caller of the stop function holds.
-
-Using 2 separate locks for this should fix this deadlock, which has been
-reported here: https://bugzilla.redhat.com/show_bug.cgi?id=985484
-
-Many thanks to Chris Dickens for figuring out the cause of this deadlock!
-
-CC: Chris Dickens <christopher.a.dickens@gmail.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- libusb/os/linux_usbfs.c | 24 +++++++++++++++++-------
- libusb/version_nano.h | 2 +-
- 2 files changed, 18 insertions(+), 8 deletions(-)
-
-diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
-index 09288af..90e23b7 100644
---- a/libusb/os/linux_usbfs.c
-+++ b/libusb/os/linux_usbfs.c
-@@ -120,7 +120,9 @@ static int sysfs_has_descriptors = -1;
- /* how many times have we initted (and not exited) ? */
- static volatile int init_count = 0;
-
--/* Serialize hotplug start/stop, scan-devices, event-thread, and poll */
-+/* Serialize hotplug start/stop */
-+usbi_mutex_static_t linux_hotplug_startstop_lock = USBI_MUTEX_INITIALIZER;
-+/* Serialize scan-devices, event-thread, and poll */
- usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
-
- static int linux_start_event_monitor(void);
-@@ -419,7 +421,7 @@ static int op_init(struct libusb_context *ctx)
- if (sysfs_has_descriptors)
- usbi_dbg("sysfs has complete descriptors");
-
-- usbi_mutex_static_lock(&linux_hotplug_lock);
-+ usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
- r = LIBUSB_SUCCESS;
- if (init_count == 0) {
- /* start up hotplug event handler */
-@@ -433,20 +435,20 @@ static int op_init(struct libusb_context *ctx)
- linux_stop_event_monitor();
- } else
- usbi_err(ctx, "error starting hotplug event monitor");
-- usbi_mutex_static_unlock(&linux_hotplug_lock);
-+ usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
-
- return r;
- }
-
- static void op_exit(void)
- {
-- usbi_mutex_static_lock(&linux_hotplug_lock);
-+ usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
- assert(init_count != 0);
- if (!--init_count) {
- /* tear down event handler */
- (void)linux_stop_event_monitor();
- }
-- usbi_mutex_static_unlock(&linux_hotplug_lock);
-+ usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
- }
-
- static int linux_start_event_monitor(void)
-@@ -469,11 +471,19 @@ static int linux_stop_event_monitor(void)
-
- static int linux_scan_devices(struct libusb_context *ctx)
- {
-+ int ret;
-+
-+ usbi_mutex_static_lock(&linux_hotplug_lock);
-+
- #if defined(USE_UDEV)
-- return linux_udev_scan_devices(ctx);
-+ ret = linux_udev_scan_devices(ctx);
- #else
-- return linux_default_scan_devices(ctx);
-+ ret = linux_default_scan_devices(ctx);
- #endif
-+
-+ usbi_mutex_static_unlock(&linux_hotplug_lock);
-+
-+ return ret;
- }
-
- static void op_hotplug_poll(void)
-diff --git a/libusb/version_nano.h b/libusb/version_nano.h
-index ebf41e1..34e26ff 100644
---- a/libusb/version_nano.h
-+++ b/libusb/version_nano.h
-@@ -1 +1 @@
--#define LIBUSB_NANO 10774
-+#define LIBUSB_NANO 10777
---
-1.8.3.1
-
diff --git a/core/libusbx/0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch b/core/libusbx/0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch
deleted file mode 100644
index 5342fbe70..000000000
--- a/core/libusbx/0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-From 852efb5a3e82de43cf6288e9904cb254ff636aa0 Mon Sep 17 00:00:00 2001
-From: Chris Dickens <christopher.a.dickens@gmail.com>
-Date: Sat, 20 Jul 2013 13:01:41 -0700
-Subject: [PATCH 2/2] hotplug: Remove use of pthread_cancel from linux_udev
-
-Using pthread_cancel() presents the opportunity for deadlock, so
-use a control pipe to cause the event thread to gracefully exit.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- libusb/os/linux_udev.c | 63 ++++++++++++++++++++++++++++++++++++++------------
- libusb/version_nano.h | 2 +-
- 2 files changed, 49 insertions(+), 16 deletions(-)
-
-diff --git a/libusb/os/linux_udev.c b/libusb/os/linux_udev.c
-index 5a2aadf..70f632d 100644
---- a/libusb/os/linux_udev.c
-+++ b/libusb/os/linux_udev.c
-@@ -46,6 +46,7 @@
- /* udev context */
- static struct udev *udev_ctx = NULL;
- static int udev_monitor_fd = -1;
-+static int udev_control_pipe[2] = {-1, -1};
- static struct udev_monitor *udev_monitor = NULL;
- static pthread_t linux_event_thread;
-
-@@ -95,14 +96,23 @@ int linux_udev_start_event_monitor(void)
- goto err_free_monitor;
- }
-
-+ r = usbi_pipe(udev_control_pipe);
-+ if (r) {
-+ usbi_err(NULL, "could not create udev control pipe");
-+ goto err_free_monitor;
-+ }
-+
- r = pthread_create(&linux_event_thread, NULL, linux_udev_event_thread_main, NULL);
- if (r) {
- usbi_err(NULL, "creating hotplug event thread (%d)", r);
-- goto err_free_monitor;
-+ goto err_close_pipe;
- }
-
- return LIBUSB_SUCCESS;
-
-+err_close_pipe:
-+ close(udev_control_pipe[0]);
-+ close(udev_control_pipe[1]);
- err_free_monitor:
- udev_monitor_unref(udev_monitor);
- udev_monitor = NULL;
-@@ -115,14 +125,19 @@ err_free_ctx:
-
- int linux_udev_stop_event_monitor(void)
- {
-+ char dummy = 1;
-+ int r;
-+
- assert(udev_ctx != NULL);
- assert(udev_monitor != NULL);
- assert(udev_monitor_fd != -1);
-
-- /* Cancel the event thread. This is the only way to guarantee the
-- thread exits since closing the monitor fd won't necessarily cause
-- poll to return. */
-- pthread_cancel(linux_event_thread);
-+ /* Write some dummy data to the control pipe and
-+ * wait for the thread to exit */
-+ r = usbi_write(udev_control_pipe[1], &dummy, sizeof(dummy));
-+ if (r <= 0) {
-+ usbi_warn(NULL, "udev control pipe signal failed");
-+ }
- pthread_join(linux_event_thread, NULL);
-
- /* Release the udev monitor */
-@@ -134,27 +149,45 @@ int linux_udev_stop_event_monitor(void)
- udev_unref(udev_ctx);
- udev_ctx = NULL;
-
-+ /* close and reset control pipe */
-+ close(udev_control_pipe[0]);
-+ close(udev_control_pipe[1]);
-+ udev_control_pipe[0] = -1;
-+ udev_control_pipe[1] = -1;
-+
- return LIBUSB_SUCCESS;
- }
-
- static void *linux_udev_event_thread_main(void *arg)
- {
-+ char dummy;
-+ int r;
- struct udev_device* udev_dev;
-- struct pollfd fds = {.fd = udev_monitor_fd,
-- .events = POLLIN};
-+ struct pollfd fds[] = {
-+ {.fd = udev_control_pipe[0],
-+ .events = POLLIN},
-+ {.fd = udev_monitor_fd,
-+ .events = POLLIN},
-+ };
-
- usbi_dbg("udev event thread entering.");
-
-- while (1 == poll(&fds, 1, -1)) {
-- if (NULL == udev_monitor || POLLIN != fds.revents) {
-+ while (poll(fds, 2, -1) >= 0) {
-+ if (fds[0].revents & POLLIN) {
-+ /* activity on control pipe, read the byte and exit */
-+ r = usbi_read(udev_control_pipe[0], &dummy, sizeof(dummy));
-+ if (r <= 0) {
-+ usbi_warn(NULL, "udev control pipe read failed");
-+ }
- break;
- }
--
-- usbi_mutex_static_lock(&linux_hotplug_lock);
-- udev_dev = udev_monitor_receive_device(udev_monitor);
-- if (udev_dev)
-- udev_hotplug_event(udev_dev);
-- usbi_mutex_static_unlock(&linux_hotplug_lock);
-+ if (fds[1].revents & POLLIN) {
-+ usbi_mutex_static_lock(&linux_hotplug_lock);
-+ udev_dev = udev_monitor_receive_device(udev_monitor);
-+ if (udev_dev)
-+ udev_hotplug_event(udev_dev);
-+ usbi_mutex_static_unlock(&linux_hotplug_lock);
-+ }
- }
-
- usbi_dbg("udev event thread exiting");
-diff --git a/libusb/version_nano.h b/libusb/version_nano.h
-index 34e26ff..39ad7e3 100644
---- a/libusb/version_nano.h
-+++ b/libusb/version_nano.h
-@@ -1 +1 @@
--#define LIBUSB_NANO 10777
-+#define LIBUSB_NANO 10778
---
-1.8.3.1
-
diff --git a/core/libusbx/PKGBUILD b/core/libusbx/PKGBUILD
index 8dc78efd1..a708fc92c 100644
--- a/core/libusbx/PKGBUILD
+++ b/core/libusbx/PKGBUILD
@@ -1,30 +1,19 @@
-# $Id: PKGBUILD 192163 2013-08-06 15:03:05Z tpowa $
+# $Id: PKGBUILD 194438 2013-09-16 12:13:08Z tpowa $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
pkgname=libusbx
-pkgver=1.0.16
-pkgrel=2
+pkgver=1.0.17
+pkgrel=1
depends=('glibc' 'systemd')
pkgdesc="Library that provides generic access to USB device"
arch=(i686 x86_64 mips64el)
url="http://libusbx.org"
license=('LGPL')
-source=(http://downloads.sourceforge.net/${pkgname}/releases/${pkgver}/${pkgname}-${pkgver}.tar.bz2
- 0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch
- 0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch)
+source=(http://downloads.sourceforge.net/${pkgname}/releases/${pkgver}/${pkgname}-${pkgver}.tar.bz2)
options=(!libtool)
replaces=('libusb1' 'libusb')
provides=("libusb=$pkgver")
conflicts=("libusb")
-md5sums=('7f5715d624cd6c26b30a317eb6c2fe5e'
- 'dad04322621fe7cabd2fe631c6d9929f'
- '259238c92c92f8b3df5dcad0db8aaf2f')
-prepare() {
- cd "${srcdir}/${pkgname}-${pkgver}"
- # fix #36418
- patch -Np1 -i ../0001-linux-Use-a-separate-lock-to-serialize-start-stop-vs.patch
- patch -Np1 -i ../0002-hotplug-Remove-use-of-pthread_cancel-from-linux_udev.patch
-}
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
./configure --prefix=/usr --disable-static
@@ -40,3 +29,4 @@ package () {
cd "${srcdir}/${pkgname}-${pkgver}"
make DESTDIR="${pkgdir}" install
}
+md5sums=('99467ca2cb81c19c4a172de9f30e7576')