As Onload handles networking in the context of the calling application's thread it is recommended that applications ensure all threads exit cleanly when the process terminates. In particular the exit()
function causes all threads to exit immediately - even those in critical sections. This can cause threads currently within the Onload stack holding the per stack lock to terminate without releasing this shared lock - this is particularly important for shared stacks where a process sharing the stack could ‘hang’ when Onload locks are not released.
An unclean exit can prevent the Onload kernel components from cleanly closing the application's TCP connections, a message similar to the following will be observed:
[onload] Stack [0] released with lock stuck
and any pending TCP connections will be reset. To prevent this, applications should always ensure that all threads exit cleanly.