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