diff --git a/pigpio.c b/pigpio.c
index 1126ec3..56c3489 100644
--- a/pigpio.c
+++ b/pigpio.c
@@ -970,6 +970,7 @@ typedef struct
int timeout;
unsigned ex;
void *userdata;
+ int fd;
int inited;
} gpioISR_t;
@@ -11477,12 +11478,16 @@ static void *pthISRThread(void *x)
sprintf(buf, "/sys/class/gpio/gpio%d/value", isr->gpio);
+ isr->fd = -1; /* no fd assigned */
+
if ((fd = open(buf, O_RDONLY)) < 0)
{
DBG(DBG_ALWAYS, "gpio %d not exported", isr->gpio);
return NULL;
}
+ isr->fd = fd; /* store fd so it can be closed */
+
pfd.fd = fd;
pfd.events = POLLPRI;
@@ -11602,6 +11607,13 @@ static int intGpioSetISRFunc(
if (gpioISR[gpio].pth) /* delete any existing ISR */
{
gpioStopThread(gpioISR[gpio].pth);
+
+ if (gpioISR[gpio].fd >= 0)
+ {
+ close(gpioISR[gpio].fd);
+ gpioISR[gpio].fd = -1;
+ }
+
gpioISR[gpio].func = NULL;
gpioISR[gpio].pth = NULL;
}
diff --git a/pigpio.h b/pigpio.h
index 03ebdca..046af93 100644
--- a/pigpio.h
+++ b/pigpio.h
@@ -31,7 +31,7 @@ For more information, please refer to
#include
#include
-#define PIGPIO_VERSION 6904
+#define PIGPIO_VERSION 6905
/*TEXT