[Lazarus] Lazarus-FPC-Indy problem

Antonio Fortuny a.fortuny at sitasoftware.lu
Fri May 24 16:08:32 CEST 2013


Le 24/05/2013 11:37, Antonio Fortuny a écrit :
> Hi Folks.
>
> I'have already submitted this boring problem to the Indy's team on 
> http://forums2.atozed.com/viewtopic.php?f=7&t=26492&p=32031#p32031.
> Because FPC or Lazarus could be involved, I post it here as well.
> The first post on Indy's forum is not too long and explains the 
> problem so it will be enough I suppose. Anyway if you need some more 
> iformation about either the problem itself or Indy, please ask me. You 
> could also post answers into the Indy's forum as well.
>
> Thanks,
>
> Antonio.
Hoping to get more information to fix the problem, I added the heaptrc 
unit to the project. Bad luck, all I get is the attached file.
Only two lines are pertinent for my program, all the rest is untrackable.
Worse, when I trace the program, I get something abnormal. The query 
solver procedure is entered as an incoming TCP/IP requests it, The DB is 
accessed by the means of a query liked to a transaction. The query is 
opened and a dynamically allocated buffer is built, out of column 
definitions and data rows. After having copied the field definitions in 
the main buffer, when the work buffer is nil'ed (ReallocMem to 0) 
control returns to very first line of the procedure as if the CPU turns 
to be crazy. All memory buffers and variables look OK until this point. 
Code snippet:

function TConnection.ExecQuery(const Sql: String; out PData: PChar; out 
DataLen: Integer; out Msg: String): Boolean;
var
...
begin
...
   try
     try
       try
         FQ.Sql.Text := Sql;        
<<<=========================================+
... |
         PData := 
nil;                                                          |
         ReAllocMem(PData, wFullSize + 
1);                                      |
         DataPos := 
0;                                                          |
         Move(PChar(wHeader)^, (PData + DataPos)^, 
HeaderLen);                  |
         Inc(DataPos, 
HeaderLen);                                               |
         Move(PFields^, (PData + DataPos)^, 
FldPos);                            |
         Inc(DataPos, 
FldPos);                                                  |
         ReAllocMem(PFields, 0);   <========== BOOM control goes back to 
=======+
         (PData + DataPos)^ := #0;

When I remove heaptrc, everything returns back to normal, except the 
main error of course.
The program uses SqlDB with a Firebird database in a thread context. But 
for he time being, only one thread is actually accessing the DB. On the 
other hand, every incoming TCP/IP connection, serviced by an Indy 
thread, owns a database connection until the connection is closed. This 
means that DB connections should be thread safe. I achieved this by 
using a DB connections list protected by a crittical section to add or 
reuse a DB connection from the list. I'm pretty sure that this 
architecture looks thread safe.
Do not forget that the same code runs on Win64 and Linux x86_64
This time I thing I'll become crazy too. :-$
I'll take a relaxing WE and come back on monday.

Antonio.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20130524/96049ee3/attachment-0003.html>
-------------- next part --------------
D:\Compiled\Lazarus\i386-win32\IpServiceConsole.exe 
Marked memory at $086F82B0 invalid
Wrong signature $BB913EA7 instead of 358D6FC9
  $004151EB
  $004152A7
  $0040DF98
  $0043675D  TCONNECTION__EXECQUERY,  line 440 of IpServiceThread.pas
  $00439E3D  TSERVICETHREAD__SERVEREXECUTE,  line 1443 of IpServiceThread.pas
  $005876A1  TIDCUSTOMTCPSERVER__DOEXECUTE,  line 548 of ./Core/IdCustomTCPServer.pas
  $005871F5  TIDCONTEXT__RUN,  line 175 of ./Core/IdContext.pas
  $005A6964  TIDTASK__DORUN,  line 133 of ./Core/IdTask.pas
  $00596C34  TIDTHREADWITHTASK__RUN,  line 625 of ./Core/IdThread.pas
  $00596182  TIDTHREAD__EXECUTE,  line 377 of ./Core/IdThread.pas
  $004491F8
  $0040F952
  $75E7D2E9
  $77081603
  $770815D6
Heap dump by heaptrc unit
604 memory blocks allocated : 418765/420840
518 memory blocks freed     : 413730/415648
86 unfreed memory blocks : 5035
True heap size : 688128
True free heap : 676192
Should be : 677432
Call trace for block $0876FC60 size 131
  $0040DF98
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $086F84B0 size 49
  $0042B7EA
  $00436BC3
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Marked memory at $086F82B0 invalid
Wrong signature $BB913EA7 instead of 358D6FC9
  $00416057
  $004151EB
  $004152A7
  $0040DF98
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
  $0040F952
  $75E7D2E9
  $77081603
  $770815D6
Call trace for block $086F02D8 size 25
  $0040DF98
  $0042B7EA
  $00436A5B
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $08700C88 size 68
  $0055DCF9
  $0055DDCD
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $08700BF8 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700B68 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700AD8 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700A48 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $087009B8 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700928 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700898 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700808 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700778 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700418 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $08700538 size 64
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $086F88B0 size 44
  $0040DF98
  $0055E63E
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $087005C8 size 68
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $087004A8 size 68
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8DD20 size 12
  $00571785
  $0056EC11
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $08700658 size 60
  $00573000
  $0056F6AD
  $0056EC09
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
Call trace for block $087006E8 size 60
  $00573000
  $0056F67B
  $0056EC09
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
Call trace for block $03B8D840 size 16
  $00572FAE
  $0056F6AD
  $0056EC09
  $0055955B
  $0055D442
  $00558465
  $0043675D
  $00439E3D
Call trace for block $03B8DA80 size 16
  $0040DF98
  $0055D004
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
Call trace for block $03B8DA20 size 16
  $0040DF98
  $0044AF03
  $00560ED7
  $005626BD
  $005608F5
  $0055D004
  $0055D442
  $00558465
Call trace for block $03B8D120 size 16
  $0044A853
  $0044AF03
  $00560ED7
  $005626BD
  $005608F5
  $0055D004
  $0055D442
  $00558465
Call trace for block $08790450 size 320
  $005608F5
  $0055D004
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
Call trace for block $03B8DAE0 size 16
  $0040DF98
  $0056065D
  $00554476
  $00558C30
  $005592AB
  $0055D442
  $00558465
  $0043675D
Call trace for block $086F8930 size 56
  $00554476
  $00558C30
  $005592AB
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $03B8E080 size 20
  $00554428
  $00558C30
  $005592AB
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $03B8DFC0 size 12
  $00554368
  $00558C30
  $005592AB
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $086F0578 size 32
  $00555F7F
  $00559AA9
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
Call trace for block $03B8DC60 size 22
  $00429955
  $00555CF8
  $00559AA9
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $03B8DD80 size 16
  $0040DF98
  $0055C086
  $0055C29A
  $00555C88
  $00559AA9
  $0055D442
  $00558465
  $0043675D
Call trace for block $086F89B0 size 52
  $0055C29A
  $00555C88
  $00559AA9
  $0055D442
  $00558465
  $0043675D
  $00439E3D
  $005876A1
Call trace for block $08750120 size 2
  $0055883C
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $086F8330 size 52
  $0055883C
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $0877FC70 size 172
  $0040DF98
  $0055883C
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D9C0 size 20
  $0040DF98
  $0055883C
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $08767D18 size 116
  $00553A6B
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $03B8D960 size 23
  $00558706
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $0875F378 size 93
  $004299DB
  $00558660
  $004369B7
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D000 size 12
  $00557AFF
  $004363D6
  $0043698F
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $0875F218 size 92
  $00553B0F
  $004363D6
  $0043698F
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
Call trace for block $086F0268 size 32
  $00436973
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $0875F168 size 93
  $0044773B
  $00436973
  $0043675D
  $00439E3D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $0875F0B8 size 93
  $0042999E
  $00439A72
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $0875F008 size 93
  $00439A64
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
  $00596182
Call trace for block $03B8D900 size 17
  $00429955
  $00439A2D
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $0875EF58 size 102
  $00442FB4
  $0059104B
  $00591198
  $004398AB
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $03B8D7E0 size 16
  $0040DF98
  $00439BED
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $03B8D720 size 16
  $0040DF98
  $00435B25
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $03B8D6C0 size 16
  $0040DF98
  $00435B25
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $03B8D660 size 16
  $0044507D
  $004453CC
  $0055BB5E
  $0055C1EB
  $0055B180
  $0055979F
  $00435B05
  $00439AB1
Call trace for block $086F8230 size 44
  $0055979F
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $08700388 size 68
  $00559768
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $087002F8 size 68
  $00559739
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $08700268 size 68
  $0055970A
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $087001D8 size 68
  $005596DB
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $03B8D600 size 16
  $0044507D
  $0056BAC0
  $005596C6
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $086F01F8 size 36
  $005596C6
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $03B8D5A0 size 16
  $0044507D
  $004453CC
  $0055BB5E
  $0055C1EB
  $0056E1A0
  $005596B5
  $00435B05
  $00439AB1
Call trace for block $086F81B0 size 44
  $0056E1A0
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $03B8D540 size 16
  $0044507D
  $0055C35B
  $0055C929
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
Call trace for block $086F00A8 size 32
  $0055C929
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D4E0 size 16
  $00445E05
  $0055C912
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
Call trace for block $03B8D480 size 16
  $0055C912
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D420 size 16
  $00569291
  $0055C8FD
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
Call trace for block $03B8D3C0 size 24
  $0055C8FD
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D360 size 16
  $0044507D
  $004453CC
  $0055BB5E
  $00560C8B
  $0055C8E6
  $0056E175
  $005596B5
  $00435B05
Call trace for block $086F8130 size 48
  $0055C8E6
  $0056E175
  $005596B5
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $087102F8 size 564
  $00435B05
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $086F0188 size 32
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
  $00596C34
Call trace for block $03B8D300 size 16
  $0040DF98
  $00435A86
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $08700148 size 68
  $00557BAC
  $00435A66
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
Call trace for block $03B8D2A0 size 16
  $00445E05
  $0056B3FC
  $00557B9D
  $00435A66
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D240 size 16
  $0056B3FC
  $00557B9D
  $00435A66
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
Call trace for block $087080C0 size 80
  $00435A66
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $03B8D1E0 size 16
  $00445E05
  $0056AC34
  $00556EED
  $00552AE1
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
Call trace for block $03B8D180 size 16
  $0056AC34
  $00556EED
  $00552AE1
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $03B8D0C0 size 16
  $00445E05
  $0056AC22
  $00556EED
  $00552AE1
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
Call trace for block $03B8D060 size 16
  $0056AC22
  $00556EED
  $00552AE1
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $087000B8 size 68
  $0056AC10
  $00556EED
  $00552AE1
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
Call trace for block $087100D8 size 464
  $00435A46
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
Call trace for block $086F80B0 size 44
  $00439AB1
  $005876A1
  $005871F5
  $005A6964
  $00596C34
  $00596182
  $004491F8
  $00596A5C
Call trace for block $03B8CFA0 size 16
  $0040DF98
  $005871B2
  $005A694B
  $00596A5C
  $0059613E
  $004491F8


More information about the Lazarus mailing list