V68+: #261 close gpio ISR fd when ISR cancelled.

This commit is contained in:
joan2937 2019-07-02 18:38:19 +01:00
parent 3ea6fd94fd
commit 7ef99aee42
2 changed files with 13 additions and 1 deletions

View File

@ -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;
}

View File

@ -31,7 +31,7 @@ For more information, please refer to <http://unlicense.org/>
#include <stdint.h>
#include <pthread.h>
#define PIGPIO_VERSION 6904
#define PIGPIO_VERSION 6905
/*TEXT