core: Pass context to backend when calling exit() function
authorChris Dickens <christopher.a.dickens@gmail.com>
Sun, 16 Jul 2017 21:18:30 +0000 (14:18 -0700)
committerChris Dickens <christopher.a.dickens@gmail.com>
Sun, 16 Jul 2017 21:18:30 +0000 (14:18 -0700)
Providing the context to the exit() function will allow backends to
perform context-specific teardown, if needed.

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
libusb/core.c
libusb/libusbi.h
libusb/os/darwin_usb.c
libusb/os/haiku_usb_raw.cpp
libusb/os/linux_usbfs.c
libusb/os/sunos_usb.c
libusb/os/wince_usb.c
libusb/os/windows_usbdk.c
libusb/os/windows_winusb.c
libusb/version_nano.h

index f21a74f..7147550 100644 (file)
@@ -2183,7 +2183,7 @@ int API_EXPORTED libusb_init(libusb_context **context)
 
 err_backend_exit:
        if (usbi_backend.exit)
-               usbi_backend.exit();
+               usbi_backend.exit(ctx);
 err_free_ctx:
        if (ctx == usbi_default_context) {
                usbi_default_context = NULL;
@@ -2274,7 +2274,7 @@ void API_EXPORTED libusb_exit(struct libusb_context *ctx)
 
        usbi_io_exit(ctx);
        if (usbi_backend.exit)
-               usbi_backend.exit();
+               usbi_backend.exit(ctx);
 
        usbi_mutex_destroy(&ctx->open_devs_lock);
        usbi_mutex_destroy(&ctx->usb_devs_lock);
index 2818125..919a921 100644 (file)
@@ -614,7 +614,7 @@ struct usbi_os_backend {
         *
         * This function is called when the user deinitializes the library.
         */
-       void (*exit)(void);
+       void (*exit)(struct libusb_contex *ctx);
 
        /* Enumerate all the USB devices on the system, returning them in a list
         * of discovered devices.
index 05aa090..9121163 100644 (file)
@@ -555,7 +555,8 @@ static int darwin_init(struct libusb_context *ctx) {
   return rc;
 }
 
-static void darwin_exit (void) {
+static void darwin_exit (struct libusb_context *ctx) {
+  UNUSED(ctx);
   if (libusb_darwin_atomic_fetch_add (&initCount, -1) == 1) {
 #if !OSX_USE_CLOCK_GETTIME
     mach_port_deallocate(mach_task_self(), clock_realtime);
index f480b2d..d1609aa 100644 (file)
@@ -38,8 +38,9 @@ haiku_init(struct libusb_context *ctx)
 }
 
 static void
-haiku_exit(void)
+haiku_exit(struct libusb_context *ctx)
 {
+       UNUSED(ctx);
        if (atomic_add(&gInitCount, -1) == 1)
                gUsbRoster.Stop();
 }
index 6a28554..98cce75 100644 (file)
@@ -486,8 +486,9 @@ static int op_init(struct libusb_context *ctx)
        return r;
 }
 
-static void op_exit(void)
+static void op_exit(struct libusb_context *ctx)
 {
+       UNUSED(ctx);
        usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
        assert(init_count != 0);
        if (!--init_count) {
index a21fd36..ab3325e 100644 (file)
@@ -42,7 +42,7 @@
  * Backend functions
  */
 static int sunos_init(struct libusb_context *);
-static void sunos_exit(void);
+static void sunos_exit(struct libusb_context *);
 static int sunos_get_device_list(struct libusb_context *,
     struct discovered_devs **);
 static int sunos_open(struct libusb_device_handle *);
@@ -79,7 +79,7 @@ static int sunos_init(struct libusb_context *ctx)
        return (LIBUSB_SUCCESS);
 }
 
-static void sunos_exit(void)
+static void sunos_exit(struct libusb_context *ctx)
 {
        usbi_dbg("");
 }
index a691c9e..5498b91 100644 (file)
@@ -239,10 +239,11 @@ init_exit: // Holds semaphore here.
        return r;
 }
 
-static void wince_exit(void)
+static void wince_exit(struct libusb_context *ctx)
 {
        HANDLE semaphore;
        TCHAR sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0'
+       UNUSED(ctx);
 
        _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF));
        semaphore = CreateSemaphore(NULL, 1, 1, sem_name);
index 047ce51..42d1368 100644 (file)
@@ -371,8 +371,9 @@ func_exit:
        return r;
 }
 
-static void usbdk_exit(void)
+static void usbdk_exit(struct libusb_context *ctx)
 {
+       UNUSED(ctx);
        if (--concurrent_usage < 0) {
                windows_common_exit();
                exit_polling();
index deb8d68..a1319b7 100644 (file)
@@ -1656,11 +1656,12 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
 /*
  * exit: libusb backend deinitialization function
  */
-static void windows_exit(void)
+static void windows_exit(struct libusb_context *ctx)
 {
        int i;
        HANDLE semaphore;
        char sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0'
+       UNUSED(ctx);
 
        sprintf(sem_name, "libusb_init%08X", (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF));
        semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name);
index 2971829..3d40961 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 11211
+#define LIBUSB_NANO 11212