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, 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? -- WBR, SD. ------------------------------------------------------------------------------ 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