_setmode( _fileno(stdin), _O_BINARY) waits for Enter key when compiled with /MD

215 Views Asked by At

I am embedding a Java VM (JVM) using JNI in a DLL for a native application on Windows (altv-server.exe). Internally JNI_CreateJavaVM calls _setmode( _fileno(stdin), _O_BINARY ) which causes the process to wait for Enter key input before it continues. The function succeeds but the waiting for input is undesirable.

The mode is in _O_TEXT prior to calling _setmode( _fileno(stdin), _O_BINARY).

This behaviour happens when the DLL is built with /MD.
With /MDd, calling _setmode from the DLL will not wait for input, but the function call made from jvm.dll still causes the process to wait for input. The server is built with /MD, and so it is required by the DLL to also be built with /MD.

1

There are 1 best solutions below

0
On BEST ANSWER

It appears that the native application had a thread that was reading from stdin. Calling _setmode(_fileno(stdin), _O_BINARY) causes this undesirable behaviour.

Starting that thread after _setmode(_fileno(stdin), _O_BINARY) resolved this particular problem.