This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: random, srandom, and initstate


On 05/31/2010 05:01 AM, Corinna Vinschen wrote:
On May 31 10:36, Corinna Vinschen wrote:
On May 19 13:40, Joel Sherrill wrote:
(2) Should I go ahead and modify them to be
     the _r versions and have the non-_r version
     call those with static variables?

Yes. [...]

Or, maybe not. Full reentrancy would require to have not only a couple of additional scalar variables in reent, but also to keep the randtbl array reentrant. That's kind of a lot of stuff.

Jeff, what do you think?


Assuming we are talking about the glibc _r versions which take a struct random_data pointer...


The _r routines will use the struct. AFAICT, the state pointer points to an allocated array so modifying the data is ok.

The reent struct should have the struct added. It will need allocation and initialization for small reent platforms. The non _r routines will call the _r routines and pass the struct random_data pointer from _REENT. There should be no static data.

Using the _REENT struct will make it so that automatic reentrancy will just work using the __getreent system in libc/include/sys/reent.h (i.e. each thread will get/use its own struct random_data under the covers).

Make sense?

-- Jeff J.


Corinna




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]