Conquest 1.5.0 bug list

  • Hi,


    I think this is the same bug related to PDU size (only on Linux) that I am addressing above. Since the C-GET works on the same association it is using another PDU size. Can you see in the log what PDU size is used for C-GET, and share the orginal and corrupted image.


    Marcel

  • Hi I really need the output of this code in socket.cxx to debug this issue:


    BOOL Socket :: SendBinary(BYTE *s, UINT count)

    {

    if ( !Connected)

    return ( 0 );


    int a;


    if(a=send ( Socketfd, (char *) s, count, 0)<0)

    {

    // fprintf(stderr, "SOCKET END ERROR: %d\n", GetLastError());

    }

    printf("Send: %d %d\n", count, a);

    return ( TRUE );

    }


    marcel

  • Hi,


    I set up a real Debian10 PC, and installed conquest 1.5.0. When I use conquest 1.5.0a on windows PC with a PDU side of 32768 or 65536 (changed PDU size in pdu.cxx) and run a scripted C-GET I do not get any corruption. Maybe a needs a Linux-Linux connection to give the error. I will try that next.


    Code
    local q=DicomObject:new()
    q.PatientID='original1'
    series = dicomget('CFAX2', 'IMAGE', q)
    print(#series)
    series[0]:Write('c:\\temp\\5.dcm')

    Marcel

  • Ok,


    I tried

    move ubuntu18 --> debian10

    move debian10 --> ubuntu18

    move windows8 --> ubuntu18

    move windows8 --> debian10

    move ubuntu18 --> windows8

    move debian10 --> ubuntu18


    and the same permutations with c-get, all with image original1


    No corruption ever.


    Marcel

  • I think I found it. There is a subtle difference between send() on Windows and Linux. Try this code in socket.cxx:


    This should solve the bug - code inspired by luasocket!


    Marcel

  • Hi Marcel, i'm just curious, when i want to start using virtual/gateway on my oracle linux, should i also recompile with upper code change (critical one?) or it's just for userpivoglot case only?

  • Hi,


    we are in a testing situation. If you have not encountered data corruption I would not yet integrate above change yet. My problem is that I cannot reproduce the issue on my systems so I cannot properly test the code. I have used the same Linux version so the behavior may be affected by things like network drivers.


    The original code (unchanged from the ancient UCDavis library) just uses send() and assumes it will not fail, which is true for Windows. In Linux, the size of packets sent is generally kept small such that there is enough buffer space for send() not to fail - on most systems. With C-GET packets sent are large and therefore it fails more frequently. I next plan to increase packet sizes on Linux to the same size as on Windows and add the code, hopefully fixing the issue and improve performance.


    But I would like to get feedback from the two users reporting data corruption first.


    Marcel

  • Hi Guys,


    please help me out by testing the update in #31 to see if it fixes the data corruption.


    I have just tested with conquest 1.5.0 on an OdroidHC1 in other country, raspberry Pi 3b on bad wifi, even my old raspberry Pi 1b on ethernet; nothing reproduces your issue. So to solve it I desperately need your help! I cannot fix what I cannot reproduce.


    Thanks,


    Marcel

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!