Re: mcedit problem (2)



 [Please excuse my editing]

On Mon, Dec 17, 2001 at 10:33:13AM +0200, Andrew V. Samoilov wrote:
> >is the following problem known? Sometimes (usually a few times a day :-(
> >) if I press F4 to edit a .cc file with the internal editor, the
> >Midnight Commander hangs up. Here is the description of the problem:
> >
> >---
> >404         for (;;) {
> >405             c = fgetc (f);
> >406             if (c == EOF) {
> >407                 if (errno == EINTR)
> >408                     continue;
> >---
> 
> I cannot reproduce this, but it is possible if previous system call was 
> interrupted.
> fgetc returns -1 on error and on end of file, so additional check needed.

 I've also tried to reproduce this w/o success. I think we need to call
clearerr(_unlocked?) on line 408 above. (If found some usenet posts that
indicated that this is indeed necessary on Solaris. (Sorry, I that was
last week and I didn't save them.))

 [I've done OS-/embedded-stuff all my life so I'm not very good at
user-space things.]

 Some quotes from libc.info:

   Error Recovery

   ...big snip...

      Most errors that can happen are not recoverable -- a second try will
   always fail again in the same way. So usually it is best to give up and
   report the error to the user, rather than install complicated recovery
   logic.

   ...small snip...

      One important exception is `EINTR' ( Interrupted Primitives). Many
   stream I/O implementations will treat it as an ordinary error, which
   can be quite inconvenient. You can avoid this hassle by installing all
   signals with the `SA_RESTART' flag.

> Does patch below help you?

> --- syntax.c	Wed Nov 28 17:17:37 2001
> +++ syntax.c-1.19+	Mon Dec 17 10:09:15 2001
> @@ -405,6 +405,8 @@ static int read_one_line (char **line, F
>      for (;;) {
>  	c = fgetc (f);
>  	if (c == EOF) {
> +	    if (feof (f))
> +		break;
>  	    if (errno == EINTR)
>  		continue;
>  	    r = 0;

 I don't think so but either way we need some code up that can test it
(EINTR), perhaps a timer?


-- 
//Björnen

Attachment: pgpcGuZM98XAe.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]