Icon View Incident Report

Serious Serious
Reported By: Daniel Kram
Reported On: 6/9/2011
For: Version 2.05 Build 9
# 3466 Executing Queries Against the ServerSessions Configuration Information Table Can Cause AV

We are trying to import a bunch of data and we remove all sessions by the following method. We find if we do not remove all sessions, we cannot create or drop tables. When we execute the query, we sometimes get an AV, read of address 00000000.

I shudder I am doing something wrong, but the read of address 000000 usually means, to me, the item is not instantiated.

1) sSQL := 'SELECT ID FROM Configuration.ServerSessions'
          + ' WHERE ID <> ' + inttostr(F_EDBSession.CurrentRemoteID);

2) self.F_EDBDatabase.Database := 'Configuration';
sSQL := 'REMOVE SERVER SESSION ' + p_sID;

where the p_sID is one of the values found in the above result



Comments Comments
The problem was caused by the population of the ServerSessions table not occurring with a lock on each session being read for status information. Therefore, it was possible for the population to not get a clean read on some user login objects that might change during the read. EDB now locks each session as it reads the session status information, which can cause delays if the session is busy with a long process, but is the only safe way to handle this situation.


Resolution Resolution
Fixed Problem on 6/12/2011 in version 2.05 build 10


Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB LCL Standard with Source
ElevateDB PHP Standard
ElevateDB PHP Standard with Source
ElevateDB PHP Trial
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial

Image