stdio thread safety
Carl Norum
carl@lytro.com
Tue Jun 4 17:27:00 GMT 2013
On Jun 4, 2013, at 1:21 AM, Corinna Vinschen <vinschen@redhat.com> wrote:
> Just override the definitions in sys/lock.h by providing your own
> sys/lock.h, along the lines of:
>
> typedef __your_lock_type _LOCK_T;
> typedef __your_lock_recursive_type _LOCK_T;
>
> #define __lock_init(__lock) __your_lock_init(__lock)
> #define __lock_init_recursive(__lock) __your_lock_init_recursive(&__lock)
> #define __lock_close(__lock) __your_lock_fini(&__lock)
> [...]
That's pretty much what I've come up with. I had to do some jiggery-pokery in
the 'acquire' routine, since it appears newlib assumes that locks can be created
at global scope/static storage class, which they can't in my environment. I
didn't want to change the interfaces, though, so I left that as is for now.
I've attached a patch that creates a new "sys/arm/sys/lock.h" to override the
default lock.h file. It uses the __SINGLE_THREAD__ definition to decide
whether or not to include references to the user-defined functions. Is this
patch something newlib might want to take? I think it should be pretty
generic. Let me know if there are some changes I can make to make it more
palatable.
>> Right now, I've worked around it by using the linker to make wrap
>> functions that lock access to stdio, but that's not very pretty. I
>> may have to do something like this anyway, though - the new
>> nano-malloc looks good, but it's explicitly not thread safe (the
>> MALLOC_LOCK and MALLOC_UNLOCK functions are defined to be nothing in
>> the source).
>
> Yes, that has been discussed and the original developer is hopefully
> looking into adding thread safety soon.
It's possible that just fixing those macros will solve the problem. I
haven't yet looked too much into the details of the implementation.
--
Carl Norum
carl@lytro.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-support-for-multithreading-to-ARM-port.patch
Type: application/octet-stream
Size: 3082 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20130604/05ff31cb/attachment.obj>
More information about the Newlib
mailing list