On 06/16/2016 07:35 PM, Dimitry Sibiryakov wrote: > Hello, All. > > Currently GPRE used to generate code like this: > >> static Firebird::IRequest* >> fb_396 = 0; /* request handle */ >> >> for (int retries = 0; retries < 2; ++retries) >> { >> { >> if (!DB) >> DB = fbProvider->attachDatabase(fbStatus, >> isqlGlob.global_Db_name, 0, NULL); >> if (DB && !fbTrans) >> fbTrans = DB->startTransaction(fbStatus, 0, NULL); >> } >> if (!fb_396 && fbTrans && DB) >> fb_396 = DB->compileRequest(fbStatus, sizeof(fb_397), fb_397); >> if (fbTrans && fb_396) >> fb_396->start(fbStatus, fbTrans, 0); >> if (fbStatus->getErrors()[1] == isc_bad_req_handle) { >> fb_396->release(); fb_396 = NULL; } >> else break; >> } >> if (!(fbStatus->getState() & Firebird::IStatus::STATE_ERRORS)) { > But if between two calls of this code database was disconnected, memory, > allocated for > fb_396 can be already freed
It can't - this is reference counted object. This is what you miss. > , so call of fb_396->start() result in crash. > Consider, for example, following script: > >> connect a; >> show generators; >> commit; >> connect b; >> show generators; > Why it doesn't crash? Pure luck or there is protection that I don't see? > This is reference counted object, and it will not be actually deleted as long as ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. http://sdm.link/zohomanageengine Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel