summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/stdio/fopen.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-03-11 00:48:35 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2013-03-11 00:48:35 +0100
commit48b0c10681bb4e0785fa9f737d287531d06fecb7 (patch)
tree568f7cdd23400f1e781b82aa044ad39748ff9d78 /sys/src/ape/lib/ap/stdio/fopen.c
parent530a2bc5e99ad83c46ce015544cf30173c145bcc (diff)
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.
Diffstat (limited to 'sys/src/ape/lib/ap/stdio/fopen.c')
-rw-r--r--sys/src/ape/lib/ap/stdio/fopen.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/src/ape/lib/ap/stdio/fopen.c b/sys/src/ape/lib/ap/stdio/fopen.c
index edf27172c..a10da3a42 100644
--- a/sys/src/ape/lib/ap/stdio/fopen.c
+++ b/sys/src/ape/lib/ap/stdio/fopen.c
@@ -2,10 +2,11 @@
* pANS stdio -- fopen
*/
#include "iolib.h"
+
FILE *fopen(const char *name, const char *mode){
FILE *f;
- for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++)
- if(f->state==CLOSED)
- return freopen(name, mode, f);
- return NULL;
+
+ if((f = _IO_newfile()) == NULL)
+ return NULL;
+ return freopen(name, mode, f);
}