#if HAVE_KERNEL_CHANGE_NOTIFY
extern int DEBUGLEVEL;
-static int fd_pending;
-static unsigned signals_received;
-static unsigned signals_processed;
+static VOLATILE SIG_ATOMIC_T fd_pending;
+static VOLATILE SIG_ATOMIC_T signals_received;
+static VOLATILE SIG_ATOMIC_T signals_processed;
#ifndef DN_ACCESS
#define DN_ACCESS 0x00000001 /* File accessed in directory */
static void signal_handler(int signal, siginfo_t *info, void *unused)
{
BlockSignals(True, signal);
- fd_pending = info->si_fd;
+ fd_pending = (SIG_ATOMIC_T)info->si_fd;
signals_received++;
sys_select_signal();
}
{
struct change_data *data = (struct change_data *)datap;
- if (data->directory_handle != fd_pending) return False;
+ if (data->directory_handle != (int)fd_pending) return False;
- DEBUG(3,("kernel change notify on %s fd=%d\n", path, fd_pending));
+ DEBUG(3,("kernel change notify on %s fd=%d\n", path, (int)fd_pending));
- close(fd_pending);
- data->directory_handle = fd_pending = -1;
+ close((int)fd_pending);
+ fd_pending = (SIG_ATOMIC_T)-1;
+ data->directory_handle = -1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_NOTIFY);
return True;
struct change_data *data = (struct change_data *)datap;
int fd = data->directory_handle;
if (fd != -1) {
- if (fd == fd_pending) {
- fd_pending = -1;
+ if (fd == (int)fd_pending) {
+ fd_pending = (SIG_ATOMIC_T)-1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_NOTIFY);
}
extern int DEBUGLEVEL;
-static unsigned signals_received;
-static unsigned signals_processed;
-static int fd_pending; /* the fd of the current pending signal */
+static VOLATILE SIG_ATOMIC_T signals_received;
+static VOLATILE SIG_ATOMIC_T signals_processed;
+static VOLATILE SIG_ATOMIC_T fd_pending; /* the fd of the current pending signal */
#ifndef F_SETLEASE
#define F_SETLEASE 1024
static void signal_handler(int signal, siginfo_t *info, void *unused)
{
BlockSignals(True, signal);
- fd_pending = info->si_fd;
+ fd_pending = (SIG_ATOMIC_T)info->si_fd;
signals_received++;
sys_select_signal();
}
if (signals_received == signals_processed) return False;
- if (sys_fstat(fd_pending,&sbuf) == -1) {
- DEBUG(0,("Invalid file descriptor %d in kernel oplock break!\n", fd_pending));
+ if (sys_fstat((int)fd_pending,&sbuf) == -1) {
+ DEBUG(0,("Invalid file descriptor %d in kernel oplock break!\n", (int)fd_pending));
ret = False;
goto out;
}
out:
/* now we can receive more signals */
- fd_pending = -1;
+ fd_pending = (SIG_ATOMIC_T)-1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_LEASE);