totally rewrote the async signal, notification and oplock notification
authorAndrew Tridgell <tridge@samba.org>
Mon, 12 Jun 2000 15:53:31 +0000 (15:53 +0000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 12 Jun 2000 15:53:31 +0000 (15:53 +0000)
commit44766c39e0027c762bee8b33b12c621c109a3267
treef2d2b7d7ef5464056d88d0fdc2f66f75fa609875
parentabf06fa90ba49f6a1ec5458d056f8b8cf20b6512
totally rewrote the async signal, notification and oplock notification
handling in Samba. This was needed due to several limitations and
races in the previous code - as a side effect the new code is much
cleaner :)

in summary:

- changed sys_select() to avoid a signal/select race condition. It is a
  rare race but once we have signals doing notification and oplocks it
  is important.

- changed our main processing loop to take advantage of the new
  sys_select semantics

- split the notify code into implementaion dependent and general
  parts. Added the following structure that defines an implementation:

struct cnotify_fns {
void * (*register_notify)(connection_struct *conn, char *path, uint32 flags);
BOOL (*check_notify)(connection_struct *conn, uint16 vuid, char *path, uint32 flags, void *data, time_t t);
void (*remove_notify)(void *data);
};

then I wrote two implementations, one using hash/poll (like our old
code) and the other using the new Linux kernel change notify. It
should be easy to add other change notify implementations by creating
a sructure of the above type.

- fixed a bug in change notify where we were returning the wrong error
  code.

- rewrote the core change notify code to be much simpler

- moved to real-time signals for leases and change notify

Amazingly, it all seems to work. I was very surprised!
17 files changed:
source/Makefile.in
source/configure
source/configure.in
source/include/config.h.in
source/include/nterr.h
source/include/proto.h
source/include/smb.h
source/lib/debug.c
source/lib/system.c
source/smbd/notify.c
source/smbd/notify_hash.c [new file with mode: 0644]
source/smbd/notify_kernel.c [new file with mode: 0644]
source/smbd/oplock.c
source/smbd/oplock_irix.c
source/smbd/oplock_linux.c
source/smbd/process.c
source/smbd/server.c