summaryrefslogtreecommitdiff
path: root/mit-pthreads/stdio/README
blob: 8e4c07909e9c7d74b615685c1aafaf4b68d63ec8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Copyright (c) 1993, 1994 Chris Provenzano. All rights reserved.

This is a threadsafe stdio based on the BSD stdio written by Chris Torek.
This product includes software developed by the Univeristy of California,
Berkeley and its contributors.

INCLUDE FILES AND PORTING
To continue to make this package portable, some basic rules on includes
files must be followed.

pthread.h should be included first (if it is to be included).
stdio.h should be included.

INTERNAL LOCKING
1.	All functions that can be called by the user must have flockfile() at the
	begining and a funlockfile() at the end. The routine flockfile() is a
	counting mutex, The thread that owns the lock can call flockfile() as 
	many times as it wants, but must call an equal number of funlockfile()
	before the lock will be released.
2.	All functions starting with __ shouldn't need addtional locking.
3.	Anything that writes the variable __sglue should lock __sfp_mutex,
 	check __sfp_state, and do a condion wait if it is set.
4.	Anything that checks fp->_flag for valididity should also lock
	__sfp_mutex.
5.	Anything that reads the variable __sglue should lock __sfp_mutex, increment
	__sfp_state, and then unlock the mutex. At function return it should
	lock the mutex again decrement __sfp_state and check if zero. If so
	do a cond_signal, and unlock the mutex.
6.	The functions fopen, fdopen, and freopen are the only functions that
	will change a fp->_file
7.	fdopen and fopen both allocate the next fp by locking __sfp_mutex
	checking fp->_flags and then setting it if free.
8.	freopen tries to preserve fp->_file. It sets __sfp_mutex, then it
	tries to lock fp->_file and close it.
9.	__sinit is done with a pthread_once routine.



Things to do.

Fix printf so it uses the ininf function.