The current event loop in smbd_server_connection_loop_once() only calls the handler for a single available fd, before going back to select(). The fds are called in the order in which fd events exist in a global linked list. Usually, since the incoming socket fd is added to this list first it sits at the beginning, and other fds, such as iNotify or oplock fd used for kernel upcalls, come later in the list. Thus, on a system with very active clients sending continuous SMB packets, the socket fd will always be serviced, and other fds that are available for reading or writing will be starved. This can cause client disconnects, when oplock break upcalls are not read from the kernel, and thus a client waits on a pending open for greater than it's timeout (Windows is approximately 1 minute). The smbd child event loop needs to be re-written to at least provide round-robin fairness to available fds.
This has been fixed in master with commit 455fccf8.