www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 5677] New: Calling Socket.select with a timeval hangs using -m64 on linux

http://d.puremagic.com/issues/show_bug.cgi?id=5677

           Summary: Calling Socket.select with a timeval hangs using -m64
                    on linux
           Product: D
           Version: D2
          Platform: x86_64
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: benshiflet gmail.com



Calling Socket.select with a timeval hangs using -m64 on linux (Ubuntu 10.10),
but works fine with -m32 (I'm using DMD 2.052).

To reproduce, save the following lines to a file (bug.d):

import std.stdio, std.socket;
void main(string[] args)
{
    writeln("About to call select...");
    Socket.select(null, null, null, 2_000_000); // 2s
    writeln("Select has returned.");
}



The following correctly returns after 2s:
    dmd -m32 bug.d && ./bug

But the following hangs:
    dmd -m64 bug.d && ./bug

Using strace shows the issue:
    dmd -m32 bug.d && strace ./bug
    prints:
        select(0, NULL, NULL, NULL, {2, 0})

    dmd -m64 bug.d && strace ./bug
    prints:
        select(0, NULL, NULL, NULL, {2, 140733585617248}

Speculation: I believe this happens because std/socket.d defines 'struct
timeval' as two ints, whereas druntime/src/core/sys/posix/sys/time.d defines it
as (time_t, suseconds_t).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 01 2011