]> git.zerfleddert.de Git - usb-driver/blobdiff - usb-driver.c
better fix for windrvrfd when device is not opened
[usb-driver] / usb-driver.c
index 0bf6e8196f8ae8bea194ad9479cf66ccdba06291..a6d64ce824c9c8136155da5fab61dc5d4d4f1709 100644 (file)
 #include <usb.h>
 #include <signal.h>
 #include <pthread.h>
+#include <errno.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;
@@ -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,
@@ -709,7 +712,7 @@ int close(int fd) {
        
        if (fd == windrvrfd) {
                DPRINTF("close windrvrfd\n");
-               windrvrfd = 0;
+               windrvrfd = -1;
        }
 
        return (*func) (fd);
Impressum, Datenschutz