fb_shutdown_callback has no effect when used in a multithreaded environment
---------------------------------------------------------------------------

                 Key: CORE-3635
                 URL: http://tracker.firebirdsql.org/browse/CORE-3635
             Project: Firebird Core
          Issue Type: Bug
          Components: API / Client Library
    Affects Versions: 2.5.0
         Environment: Linux Debian-Squeeze libfbclient2 Build 26054
Firebird SS 2.5.0.26054
Application written in C++ is using omniORB for IPC and the POSIX threading 
from omniORB
            Reporter: Eberhard Leba


The Application using the fbclient library has its own shutdown handler running 
in a dedicated thread. Database queries and modifications are done in a 
separate worker thread that serializes the requests.

Starting using FB version 2.5.0 the application process has been terminated 
ungracefully by the worker thread
  * loosing connection to the database  (Cursor failed arg:, SQLCODE:-902)
  * loosing IPC because omniorb DTOR is called.

After the problem was analyzed a fb_shutdown_callback was implemented, as shown 
in the example, but the database connection still gets lost when the value 1 is 
returned.
 
int FB_shutdownCallbackHandler(const int reason, const int mask, void* arg){
    log_FUNC_m(FB_shutdownCallback);
    int rc = 0;
    // Do not terminate on SIGTERM or SIGINT
    if (mask == fb_shut_preproviders && reason == fb_shutrsn_signal) {
        rc = 1; // do not shut down
        g_ShutdownPermitted.Wait();
    }
    log_DBG_m(dbg_LOW, "***** Reason = " <<  reason <<  " mask = 0x" << hex << 
mask << " *****  returning " << rc  );
    return rc;
}

As a workaround FB_shutdownCallbackHandler is now blocked on a semaphore (the 
g_ShutdownPermitted.Wait stuff) until the application shutdown did its work.

In this case the app shuts down as designed, but there is still a race 
condition left.

BTW: I have also tried to return 0 from the handler in case of 
     mask == fb_shut_preproviders && reason == fb_shutrsn_signal
 but it does not seem to have an effect either.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to