Subject | Safe Thread - ODBC |
---|---|
Author | |
Post date | 2016-11-22T12:32:36Z |
We have a multithreaded app written in Clarion 9 (win32), running on several
win 2012 64 bits r2, connecting to Firebird 3 (latest build) via ODBC 32
bits (latest ODBC). We are experiencing a rare propblem, that happens not
very often. The issue is as follows:
The application does not use "begin transaction and commit", so we let the
database commit automatically
after a write process, we read the table from another thread inside the app
or from another app inside the same OS session, and the data is not there.
Of course after a few seconds (or milliseconds) the data is available. Our
concern is that we have a sequence of code that assume whatever was written
5 lines above is already available for reading, but it is failing every so
often. One solution we are considering is to use "explicit" begin
transaction and commit instead of implicit, any thoughts? (in the past, when
firebird was on version 1.5 or 2) we tried to use explicit transactions and
the system would lock up every 20 minutes... probably deadly embrace, but we
believe it was not related to the application itself, we attributed at the
time to a possible bug somewhere betweeen the ODBC or the Firebird engine
because the same app running against another DB engine would not lock up.
Any suggestions?
Cheers,
Fabian
win 2012 64 bits r2, connecting to Firebird 3 (latest build) via ODBC 32
bits (latest ODBC). We are experiencing a rare propblem, that happens not
very often. The issue is as follows:
The application does not use "begin transaction and commit", so we let the
database commit automatically
after a write process, we read the table from another thread inside the app
or from another app inside the same OS session, and the data is not there.
Of course after a few seconds (or milliseconds) the data is available. Our
concern is that we have a sequence of code that assume whatever was written
5 lines above is already available for reading, but it is failing every so
often. One solution we are considering is to use "explicit" begin
transaction and commit instead of implicit, any thoughts? (in the past, when
firebird was on version 1.5 or 2) we tried to use explicit transactions and
the system would lock up every 20 minutes... probably deadly embrace, but we
believe it was not related to the application itself, we attributed at the
time to a possible bug somewhere betweeen the ODBC or the Firebird engine
because the same app running against another DB engine would not lock up.
Any suggestions?
Cheers,
Fabian