mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 15:00:12 +00:00
a5fc7b3fc3
rxi_DestroyConnectionNoLock contains the following early return test: if ((conn->refCount > 0) || (conn->flags & RX_CONN_BUSY)) { /* Busy; wait till the last guy before proceeding */ MUTEX_EXIT(&rx_refcnt_mutex); MUTEX_EXIT(&conn->conn_data_lock); USERPRI; return; } This prevents the rx_connection ("conn") from being destroyed if it is still in use elsewhere, e.g.: - the rx_Listener is handling packets for one of the conn's rx_calls - another caller has a reference to the conn However, since the original IBM code import, rxi_ReceivePacket obtains a conn reference (via rxi_FindConnection) but returns it by merely decrementing the refCount (currently via putConnection), and does not call rx_DestroyConnection. If the listener's rxi_ReceivePacket is processing a reply or ack for a client conn (holding a reference) while another thread is calling rx_DestroyConnection on the otherwise-last reference, the rx_connection will not be destroyed and can never be destroyed - it has been leaked. Modify rxi_ReapConnections to destroy client conns with refCount == 0. This way, these connections can still "leak", but they're eventually cleaned up the next time rxi_ReapConnections runs. Change-Id: I8c588d43b108a8147a07d0ff0cc69055cd00d355 Reviewed-on: https://gerrit.openafs.org/15135 Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Andrew Deason <adeason@sinenomine.net> |
||
---|---|---|
build-tools | ||
doc | ||
src | ||
tests | ||
.gitignore | ||
.gitreview | ||
.mailmap | ||
.splintrc | ||
acinclude.m4 | ||
CODING | ||
configure-libafs.ac | ||
configure.ac | ||
CONTRIBUTING | ||
INSTALL | ||
libafsdep | ||
LICENSE | ||
Makefile-libafs.in | ||
Makefile.in | ||
NEWS | ||
NTMakefile | ||
README | ||
README-WINDOWS | ||
regen.sh |
AFS is a distributed file system that enables users to share and access all of the files stored in a network of computers as easily as they access the files stored on their local machines. The file system is called distributed for this exact reason: files can reside on many different machines, but are available to users on every machine. OpenAFS 1.0 was originally released by IBM under the terms of the IBM Public License 1.0 (IPL10). For details on IPL10 see the LICENSE file in this directory. The current OpenAFS distribution is licensed under a combination of the IPL10 and many other licenses as granted by the relevant copyright holders. The LICENSE file in this directory contains more details, thought it is not a comprehensive statement. See INSTALL for information about building and installing OpenAFS on various platforms. See CODING for developer information and guidelines. See NEWS for recent changes to OpenAFS.