The cleanup mechanisms of all supported protocols and guacd itself currently depend on the underlying client library being well behaved. In general, this works well, but there exist circumstances where bugs in an underlying library result in the process hanging, spinning, etc., despite the actual Guacamole side of the connection having entered a disconnected state. If this occurs, the process handling the connection never terminates.
The handling of each connection process should be modified such that a failsafe kicks in if disconnect is not handled in a timely manner. If the Guacamole side of a connection closes, the protocol support should have some reasonable amount of time to finish its own cleanup, after which guacd should assume the worst and forcibly kill the process, allowing the OS to reclaim resources.