Some weird crashes

simendsjo simen.endsjo at pandavre.com
Mon Feb 28 09:52:11 PST 2011


I'm trying to wrap the newest mysql c connector, but I get some weird 
bugs. I don't know any assembly, so I don't even know if I've included 
enough info.. I hope this is a small enough test case so someone can 
understand the issue.
I've used implib on the included dll and rdmd and dmd 2.051 to compile.

// CORRECT
auto res = mysql_library_init(0, null, null);

auto cn = mysql_init(null);
auto oldcn = cn;

writeln(mysql_errno(cn));
assert(cn == oldcn);

auto err = mysql_errno(cn);
//assert(cn == oldcn); // notice this is commented out

mysql_close(cn);
mysql_library_end();


0040201A  |. E8 F5B30300    CALL <JMP.&libmysql.mysql_server_init>
0040201F  |. 6A 00          PUSH 0
00402021  |. E8 E8B30300    CALL <JMP.&libmysql.mysql_init>
00402026  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
00402029  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
0040202C  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]
0040202F  |. E8 D4B30300    CALL <JMP.&libmysql.mysql_errno>
00402034  |. 83C4 04        ADD ESP,4
00402037  |. E8 4C000000    CALL mytest_w.00402088
0040203C  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0040203F  |. 3B45 FC        CMP EAX,DWORD PTR SS:[EBP-4]
00402042  |. B9 01000000    MOV ECX,1
00402047  |. 74 02          JE SHORT mytest_w.0040204B
00402049  |. 8ACD           MOV CL,CH
0040204B  |> 894D F4        MOV DWORD PTR SS:[EBP-C],ECX
0040204E  |. 74 0A          JE SHORT mytest_w.0040205A
00402050  |. B8 1A000000    MOV EAX,1A
00402055  |. E8 662A0000    CALL mytest_w.00404AC0
0040205A  |> FF75 F8        PUSH DWORD PTR SS:[EBP-8]
0040205D  |. E8 A6B30300    CALL <JMP.&libmysql.mysql_errno>
00402062  |. 807D F4 00     CMP BYTE PTR SS:[EBP-C],0
00402066  |. 75 0A          JNZ SHORT mytest_w.00402072
00402068  |. B8 1D000000    MOV EAX,1D
0040206D  |. E8 4E2A0000    CALL mytest_w.00404AC0
00402072  |> FF75 F8        PUSH DWORD PTR SS:[EBP-8]
00402075  |. E8 88B30300    CALL <JMP.&libmysql.mysql_close>
0040207A  |. E8 7DB30300    CALL <JMP.&libmysql.mysql_server_end>
0040207F  |. 31C0           XOR EAX,EAX
00402081  |. 83C4 18        ADD ESP,18
00402084  |. C9             LEAVE
00402085  \. C3             RETN



// ERROR
auto res = mysql_library_init(0, null, null);

auto cn = mysql_init(null);
auto oldcn = cn;

writeln(mysql_errno(cn));
assert(cn == oldcn); // when the last assert is active, the above line 
changes cn and thus fails.

auto err = mysql_errno(cn);
assert(cn == oldcn);

mysql_close(cn);
mysql_library_end();
0040201A  |. E8 D5B30300    CALL <JMP.&libmysql.mysql_server_init>
0040201F  |. 6A 00          PUSH 0
00402021  |. E8 C8B30300    CALL <JMP.&libmysql.mysql_init>
00402026  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
00402029  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
0040202C  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]
0040202F  |. E8 B4B30300    CALL <JMP.&libmysql.mysql_errno>
00402034  |. 83C4 04        ADD ESP,4
00402037  |. E8 30000000    CALL mytest_f.0040206C
0040203C  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0040203F  |. 3B45 FC        CMP EAX,DWORD PTR SS:[EBP-4]
00402042  |. 74 0A          JE SHORT mytest_f.0040204E
00402044  |. B8 1A000000    MOV EAX,1A
00402049  |. E8 562A0000    CALL mytest_f.00404AA4
0040204E  |> FF75 F8        PUSH DWORD PTR SS:[EBP-8]
00402051  |. E8 92B30300    CALL <JMP.&libmysql.mysql_errno>
00402056  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]
00402059  |. E8 84B30300    CALL <JMP.&libmysql.mysql_close>
0040205E  |. E8 79B30300    CALL <JMP.&libmysql.mysql_server_end>
00402063  |. 31C0           XOR EAX,EAX
00402065  |. 83C4 18        ADD ESP,18
00402068  |. C9             LEAVE
00402069  \. C3             RETN



More information about the Digitalmars-d-learn mailing list