#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;
static pthread_mutex_t int_wait = PTHREAD_MUTEX_INITIALIZER;
#define NO_WINDRVR 1
-#undef DEBUG
+/* #define DEBUG 1 */
#ifdef DEBUG
#define DPRINTF(format, args...) fprintf(stderr, format, ##args)
it->dwLost, it->fStopped);
it->fEnableOk = 1;
+ it->fStopped = 0;
ints_enabled = 1;
pthread_mutex_trylock(&int_wait);
}
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,
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);