On Jan 26 11:23, Corinna Vinschen wrote: > On Jan 25 14:31, cornware...@lavabit.com wrote: > > I am trying to make a multi-threaded application, where one thread reads > > commands from stdin, and another thread is doing other things, such as > > reading files and printing messages to stdout. > > > > The problem I have is that the thread that reads files and writes to stdout > > locks while the other thread is reading from stdin. To demonstrate this, > > I created a small program that has this behavior. The C-code is present at > > the end of this e-mail. > > [...] > > Thanks for the testcase! > > First of all, I can confirm your observation and your testcase easily > allows to debug what happens. What happens is that the read operation > in scanf and the read operation in fgetc are blocking each other out > because they access the same global lock. > > I could track down this behaviour to a specific change in newlib from > 2009, which also explains why this still worked in 1.5 (which I tested > as well). > > So, the next task for me is to find out why this change has been made > and to talk to the contributor of the change to come to a solution > which does not show this unfortunate behaviour. > > What you can do for the time being is to use the low-level IO functions > read and write, rather than the stdio functions fgetc and putchar, since > only the stdio functions are affected by this. > > I hope to find a solution soon and the bugfix will definitely be in 1.7.8.
After some discussion with my newlib co-maintainer I checked in a patch which should solve your problem. Your testcase works fine for me now when using the latest developer snapshot(*) from today. Please give it a test in your environment. Thanks, Corinna (*) http://cygwin.com/snapshots/ -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple