The patch looks good. Your arguments are valid too. I'd take approach #2 if I were implementing newlib, but your argument #3 "why do we care" is certainly valid.
The only thing I need to commit this is a ChangeLog entry. Danny On Fri, 2008-08-29 at 13:34 -0700, Pawel Veselov wrote: > This attached patch should take care of the _close_r() problem. As you > suggested, I extended FD_CHECK to take 2 arguments. > > Regarding protecthing the _fdtab[] contents... Locking the section > completely during read/write operations will serialize IO of any MT > program. As it now happens with _write_r(), only one thread can write > to any file at a time. That doesn't sound right. > > I see three potential ways out of this: > > 1. In the beginning of a function, lock the section, copy the contents > of _fdtab[fd] to a local variable, and release the lock. It doesn't > look like any IO involved methods change the contents of the fd > structure, but I haven't really looked at what happens to the "cxt", > and whether we need to worry about applications that try to access the > same fd simultaneously from multiple threads. There seems to be no > POSIX statements about MT safety of read()/write() system calls. > > 2. add critical section structure as a member of _fdent_s structure. > Here, I'm not sure how big the structure actually is in memory, and > whether it is going present significant memory consumption, and > whether there are any other vital resources that are allocated for the > initialized critical section, but MSDN says that > InitializeCriticalSection may return OUT_OF_MEMORY, so there must be > some other resources that are being allocated, and this may not turn > out to be feasible. > > 3. Why do we care about locking? :) It seems that if an application is > careless enough to execute IO operations on the same file descriptor > simultaneously from multiple threads, it's an application issue, and > it should lead to unpredictable results. The library should only care > about not corrupting it's structures to the point where accessing them > will lead to a system exception. > > Thanks, > Pawel. > > P.S. The source file seems to be in DOS format, and there is no > svn:eol-style property set... Shouldn't it be? The patch therefore is > half in DOS format :) (generated using svn diff) > > On Fri, Aug 29, 2008 at 11:04 AM, Danny Backx <[EMAIL PROTECTED]> wrote: > > On Thu, 2008-08-28 at 19:29 -0700, Pawel Veselov wrote: > >> Hi, > >> > >> Was looking at the _close_r() in > >> src/newlib/newlib/libc/sys/wince/io.c, at the top: > >> > >> EnterCriticalSection(&critsect); > >> FDCHECK(fd); > >> > >> FDCHECK() macro can return from the method if file handle is invalid, > >> and if it does, wouldn't that leave the lock, and cause deadlock for I/O > >> operations? > > > > That's a very sharp observation ! Thanks for pointing this out. > > > >> P.S. What does critsect protect there? Changes to fd[*].fd ? > > > > I'd say all of the _fdtab array. However, as you point out, in some > > places it's not coded very well. More browsing through that source make > > wonder about the quality of that code. The _read_r() function uses this > > same _fdtab[] but never uses the critical section. > > > > Would you be willing to submit a fix for this ? > > > > My first idea would be to add a second argument to FDCHECK which could > > be the statement to run before the return. > > > > Danny > > -- > > Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info > > > > > > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ Cegcc-devel mailing list > Cegcc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/cegcc-devel -- Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Cegcc-devel mailing list Cegcc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cegcc-devel