X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/f1405f13797febaa06b86a5c800dce2fcaada45f..f0bfb2db7dd53c2ac7c8376805ad596d080bddc8:/usb-driver.c diff --git a/usb-driver.c b/usb-driver.c index 0bf6e81..d38da3e 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -36,6 +36,7 @@ #include #include #include +#include #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);