From 48b0c10681bb4e0785fa9f737d287531d06fecb7 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 11 Mar 2013 00:48:35 +0100 Subject: ape/stdio: make fopen() quasi threadsafe for python python uses processes sharing memory. it requires at least fopen() to be called by multiple threads at once so we introduce _IO_newfile() which allocates the FILE structure slot under a lock. --- sys/src/ape/lib/ap/stdio/fread.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'sys/src/ape/lib/ap/stdio/fread.c') diff --git a/sys/src/ape/lib/ap/stdio/fread.c b/sys/src/ape/lib/ap/stdio/fread.c index c064a5649..1b54af2c6 100644 --- a/sys/src/ape/lib/ap/stdio/fread.c +++ b/sys/src/ape/lib/ap/stdio/fread.c @@ -12,7 +12,7 @@ size_t fread(void *p, size_t recl, size_t nrec, FILE *f){ s=(char *)p; n=recl*nrec; - while(n>0){ + while(n>0 && f->state!=CLOSED){ d=f->wp-f->rp; if(d>0){ if(d>n) @@ -23,7 +23,8 @@ size_t fread(void *p, size_t recl, size_t nrec, FILE *f){ if(f->buf==f->unbuf || (n >= BIGN && f->state==RD && !(f->flags&STRING))){ d=read(f->fd, s, n); if(d<=0){ - f->state=(d==0)?END:ERR; + if(f->state!=CLOSED) + f->state=(d==0)?END:ERR; goto ret; } }else{ -- cgit v1.2.3