be a bit more intelligent in 'interrupt' handling
authormichael <michael>
Sun, 25 Feb 2007 14:10:06 +0000 (14:10 +0000)
committermichael <michael>
Sun, 25 Feb 2007 14:10:06 +0000 (14:10 +0000)
usb-driver.c

index 0bf6e8196f8ae8bea194ad9479cf66ccdba06291..be08eff4236fec1f5d5de7194225f2926a92d874 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,
Impressum, Datenschutz