]> git.zerfleddert.de Git - usb-driver/blobdiff - usb-driver.c
fix 64bit and add DEBUG shared object
[usb-driver] / usb-driver.c
index 0bf6e8196f8ae8bea194ad9479cf66ccdba06291..5a5a1479d1afc66e8231a4be24b67234fcbf3ec0 100644 (file)
 #include <usb.h>
 #include <signal.h>
 #include <pthread.h>
+#include <errno.h>
+#include <inttypes.h>
 #include "usb-driver.h"
 
 static int (*ioctl_func) (int, int, void *) = NULL;
-static int windrvrfd = 0;
-FILE *modulesfp;
+static int windrvrfd = -1;
+FILE *modulesfp = NULL;
 static int modules_read = 0;
 static struct usb_bus *busses = NULL;
 static struct usb_device *usbdevice;
@@ -50,7 +52,6 @@ static int ints_enabled = 0;
 static pthread_mutex_t int_wait = PTHREAD_MUTEX_INITIALIZER;
 
 #define NO_WINDRVR 1
-#undef DEBUG
 
 #ifdef DEBUG
 #define DPRINTF(format, args...) fprintf(stderr, format, ##args)
@@ -330,6 +331,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
                                it->dwLost, it->fStopped);
 
                                it->fEnableOk = 1;
+                               it->fStopped = 0;
                                ints_enabled = 1;
                                pthread_mutex_trylock(&int_wait);
                        }
@@ -351,7 +353,8 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
                                it->dwCounter = 0;
                                it->fStopped = 1;
                                ints_enabled = 0;
-                               pthread_mutex_unlock(&int_wait);
+                               if (pthread_mutex_trylock(&int_wait) == EBUSY)
+                                       pthread_mutex_unlock(&int_wait);
 #endif
                                DPRINTF("Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
                                it->hInterrupt, it->dwOptions,
@@ -707,9 +710,9 @@ int close(int fd) {
        if (!func)
                func = (int (*) (int)) dlsym(RTLD_NEXT, "close");
        
-       if (fd == windrvrfd) {
+       if (fd == windrvrfd && windrvrfd >= 0) {
                DPRINTF("close windrvrfd\n");
-               windrvrfd = 0;
+               windrvrfd = -1;
        }
 
        return (*func) (fd);
Impressum, Datenschutz