]> git.zerfleddert.de Git - usb-driver/blobdiff - usb-driver.c
BUG-Fix: Do not do ioctls on fd == 0
[usb-driver] / usb-driver.c
index 0bf6e8196f8ae8bea194ad9479cf66ccdba06291..d38da3e4dfdc2bf8a5a4321beec0e7cff41b14c5 100644 (file)
@@ -36,6 +36,7 @@
 #include <usb.h>
 #include <signal.h>
 #include <pthread.h>
+#include <errno.h>
 #include "usb-driver.h"
 
 static int (*ioctl_func) (int, int, void *) = NULL;
@@ -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,
@@ -657,7 +660,7 @@ int ioctl(int fd, int request, ...) {
        argp = va_arg (args, void *);
        va_end (args);
 
-       if (fd == windrvrfd)
+       if (windrvrfd && (fd == windrvrfd))
                ret = do_wdioctl(fd, request, argp);
        else
                ret = (*ioctl_func) (fd, request, argp);
Impressum, Datenschutz