mirror of
https://github.com/RetroShare/libretroshare.git
synced 2026-09-12 19:50:03 +05:00
Merge pull request #366 from jolavillette/fix/jsonapi-stop-api-before-plugins
Stop the JSON API before plugins delete their resource providers
This commit is contained in:
commit
72d9d16833
@ -84,6 +84,21 @@ void RsServer::rsGlobalShutDown()
|
||||
bool wasReady = coreReady;
|
||||
coreReady = false;
|
||||
|
||||
#ifdef RS_JSONAPI
|
||||
/* Stop the JSON API before anything else. Plugins delete their
|
||||
* JsonApiResourceProvider in stopPlugins() below, while the restbed service
|
||||
* still holds the resources that provider handed out -- their handlers
|
||||
* capture it, so serving a request in that window dereferences freed
|
||||
* memory. The window is not small: everything between stopPlugins() and the
|
||||
* end of this function can take tens of seconds, and a web interface polls
|
||||
* throughout. Stopping first also keeps an API client from touching the
|
||||
* configuration after ConfigFinalSave().
|
||||
*
|
||||
* Not inside the wasReady branch: retroshare-service and Android start the
|
||||
* JSON API before login, so a shutdown from that state must stop it too. */
|
||||
if(rsJsonApi) rsJsonApi->fullstop();
|
||||
#endif
|
||||
|
||||
if(wasReady)
|
||||
{
|
||||
/* Close the incoming-connection listener FIRST, before anything else.
|
||||
@ -123,10 +138,6 @@ void RsServer::rsGlobalShutDown()
|
||||
* iterating the peer list concurrently. */
|
||||
if(pqih) pqih->fullstopAllThreads();
|
||||
|
||||
#ifdef RS_JSONAPI
|
||||
if(rsJsonApi) rsJsonApi->fullstop();
|
||||
#endif
|
||||
|
||||
AuthPGP::exit();
|
||||
|
||||
// close all databases
|
||||
|
||||
Loading…
Reference in New Issue
Block a user