Re: Fwd: Re: exit(1) pb
On Wednesday 27 June 2001 09:50, Rogier Wolff wrote:
> My guess:
>
> The "exit" contains an implicit "close all file descriptors".
>
> The "close a serial line filedescriptor" may want to flush all
> characters that were sent. If for example the device at the other end
> signals "please don't send anything" through the handshaking, then
> "wait until everything is sent" can take a noticable amount of time...
You are right!!!
As opening lots of file descriptors and never ever closing them is a bug
anyway I decided to go through my code and make sure that every file
descriptor is closed the moment it is no longer needed.
Now when I detect an error I do:
close(0);
close(1);
close(2);
As all three file handles refer to the serial device. The close(2)
statement closes the last open file handle for the serial device and is
hanging.
So then I added the following code before closing the tty:
tcflush(0, TCIFLUSH);
tcflush(1, TCOFLUSH);
tcflush(2, TCOFLUSH);
Now my program works fine! Rogier you are a programming god! Thanks for
your help.
Russell Coker
> How the alignment of your code happens to affect all this is beyond
> me.
> >
> > The problem is that my program will get stuck apparently in kernel
> > mode after calling exit(). Strace etc will all show that it has
> > called exit() and never returned. Returning a value from the main()
> > function has the same result as calling exit() in that the program
> > halts but does not exit.
--
http://www.coker.com.au/bonnie++/ Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/ Postal SMTP/POP benchmark
http://www.coker.com.au/projects.html Projects I am working on
http://www.coker.com.au/~russell/ My home page
Reply to: