Code:
v7.3.1 Release Notes:
1) Files in \System:
Changed : ioFTPD.[exe,pdb] - Version 7.3.1.0.
Added : ioFTPD-Watch.exe - Version 1.0.0.0.
Changed : ioFTPD.ini - summary of changes by section...
[Threads] : Restart_On_Deadlock added.
*** New Features
2) New ioFTPD.ini option (Restart_On_Deadlock under [Threads]). If this
is enabled the server will start the child process ioFTPD-Watch.exe and
signal it when it thinks the server has locked up so it can terminate
the server since it cannot do it itself when the loader lock has been
compromised. When run as a service it can be configured to automatically
restart. (The ServiceInstaller.exe tool by default configures it to
auto-restart provided it hasn't crashed within the last 10 minutes).
3) If the server is preloading directories or running a recursive action
through a directory tree and the server begins shutting down the operation
will now abort.
*** Bug Fixes
4) Fixed a bug with resolving relative symbolic links (../foo) where the
last component of the symbolic directory path was being removed before
following the link when it shouldn't have been. The non-symbolic path
was be updated correctly though.
5) Fixed a bug in "site symlink" introduced when attempting to preserve the
alternate timestamp / upload speed fields added in v7.2 but referenced the
wrong fileinfo structure.
6) Fixed a bug in the EXEC module where I wasn't zeroing out the Overlapped
structure before re-using it. This would cause it to sometimes generate
an error.
7) Fixed a bug where an Event handle created in the EXEC module wasn't being
closed.
8) Fixed a bug in login code that would cause crashes during logout if the
userfile was unable to be locked during login. This can only happen if
using a shared user module and even then it shouldn't happen.
9) Fixed a potential race condition on some bits in a bit field used by the
data transfer code. In theory if a transfer is aborted in some situations
it's possible that 2 threads may be changing 2 different bits but because
these are bit fields require a read/modify/write sequence they aren't
atomic operations. I simply moved the 1 bit that can be set by more than
1 thread out of the bitfield.
*** Debugging Only Changes:
10) 2 new Error logfile entries to catch problems during logoff that should
no longer be possible with the bugfix above.
* Supposedly logged in user missing userfile!
* Client structure identifies user as logged in but no userfile: %d
11) New Error logfile entry if a userfile cannot be locked.
12) New debug logfile entry if the server attempts to cancel an internal
async select and it appears that it may have already had activity.
13) New debug logfile entry if the timeout function for connected sockets
shows a previous error. Not all errors recorded here are things to
worry about, some may be valid and will be excluded in later releases.
*** Internal non-visible changes:
14) Moved setting socket to non-lingering after disconnect from the socket
close routines to right after creation just in case that helps.