Thread overview
readln() blocks file operations on windows
Jul 31, 2014
Martin Drasar
Jul 31, 2014
FreeSlave
Jul 31, 2014
Martin Drasar
Aug 05, 2014
Inspi8
July 31, 2014
Hi,

consider this code:

import std.stdio;
import std.concurrency;
import core.thread;

void tryOpen()
{
  Thread.sleep(2.seconds);
  try {
    auto f = File("nonexistent");
  }
  catch (Exception e) {
    writeln("Could not open a file");
  }
}

void main()
{
  spawn(&tryOpen);
  readln();
}


On Linux, it works as expected, showing a "Could not open a file" after two or so seconds. On windows, however, the file opening gets blocked until a line is read from stdin.

Is this a feature or a bug? If it is a feature, it certainly is not documented.

Cheers,
Martin
July 31, 2014
Note that output to stdout is not good choice to check event order, because it's buffered. Try to flush stdout or write to stderr. Maybe it's actual problem.
July 31, 2014
On 31.7.2014 20:37, FreeSlave via Digitalmars-d wrote:
> Note that output to stdout is not good choice to check event order, because it's buffered. Try to flush stdout or write to stderr. Maybe it's actual problem.

Hi,

this is just for illustration, although I think that writeln flushes itself. I was checking it in a debugger after it suddenly hung my entire program.

Martin
August 05, 2014
On Thursday, 31 July 2014 at 19:13:28 UTC, Martin Drasar via Digitalmars-d wrote:
> On 31.7.2014 20:37, FreeSlave via Digitalmars-d wrote:
>> Note that output to stdout is not good choice to check event order,
>> because it's buffered. Try to flush stdout or write to stderr. Maybe
>> it's actual problem.
>
> Hi,
>
> this is just for illustration, although I think that writeln flushes
> itself. I was checking it in a debugger after it suddenly hung my entire
> program.
>
> Martin

Hi,

It works under Windows wenn compiled as a 64-bit program ( -m64 )