in src/afs.cc [680:720]
void close_internal(bool unlockSession)
{
closed_ = true;
pgstat_report_activity(STATE_RUNNING, (std::string(Tag) + ": closing").c_str());
if (connected_)
{
SPI_finish();
CommitTransactionCommand();
{
SharedRingBuffer buffer(&(session_->bufferData), area_);
buffer.free();
}
delete_session(session_);
}
else
{
if (!DsaPointerIsValid(session_->errorMessage))
{
set_shared_string(session_->errorMessage, "failed to connect");
}
session_->initialized = true;
if (unlockSession)
{
dshash_release_lock(sessions_, session_);
}
P("%s: %s: %s: kill server: %d", Tag, tag_, AFS_FUNC, sharedData_->serverPID);
kill(sharedData_->serverPID, SIGUSR1);
}
if (CurrentResourceOwner)
{
auto resourceOwner = CurrentResourceOwner;
CurrentResourceOwner = nullptr;
ResourceOwnerRelease(
resourceOwner, RESOURCE_RELEASE_BEFORE_LOCKS, false, true);
ResourceOwnerRelease(resourceOwner, RESOURCE_RELEASE_LOCKS, false, true);
ResourceOwnerRelease(
resourceOwner, RESOURCE_RELEASE_AFTER_LOCKS, false, true);
ResourceOwnerDelete(resourceOwner);
}
pgstat_report_activity(STATE_IDLE, NULL);
}