Remove __sinit_locks / __sinit_recursive_mutex
Remove __sinit_lock_acquire() and __sinit_lock_release(). Replace these with __sfp_lock_acquire() and __sfp_lock_release(), respectively. This eliminates a potential deadlock issue between __sinit() and __sfp(). Remove now unused __sinit_recursive_mutex and __lock___sinit_recursive_mutex.
This commit is contained in:
parent
e5e36867f8
commit
d83aa402b7
|
@ -2,8 +2,6 @@
|
|||
FUNCTION
|
||||
<<__retarget_lock_init>>, <<__retarget_lock_init_recursive>>, <<__retarget_lock_close>>, <<__retarget_lock_close_recursive>>, <<__retarget_lock_acquire>>, <<__retarget_lock_acquire_recursive>>, <<__retarget_lock_try_acquire>>, <<__retarget_lock_try_acquire_recursive>>, <<__retarget_lock_release>>, <<__retarget_lock_release_recursive>>---locking routines
|
||||
|
||||
INDEX
|
||||
__lock___sinit_recursive_mutex
|
||||
INDEX
|
||||
__lock___sfp_recursive_mutex
|
||||
INDEX
|
||||
|
@ -44,7 +42,6 @@ INDEX
|
|||
|
||||
SYNOPSIS
|
||||
#include <lock.h>
|
||||
struct __lock __lock___sinit_recursive_mutex;
|
||||
struct __lock __lock___sfp_recursive_mutex;
|
||||
struct __lock __lock___atexit_recursive_mutex;
|
||||
struct __lock __lock___at_quick_exit_mutex;
|
||||
|
@ -92,7 +89,6 @@ struct __lock {
|
|||
char unused;
|
||||
};
|
||||
|
||||
struct __lock __lock___sinit_recursive_mutex;
|
||||
struct __lock __lock___sfp_recursive_mutex;
|
||||
struct __lock __lock___atexit_recursive_mutex;
|
||||
struct __lock __lock___at_quick_exit_mutex;
|
||||
|
|
|
@ -235,11 +235,11 @@ cleanup_stdio (struct _reent *ptr)
|
|||
void
|
||||
__sinit (struct _reent *s)
|
||||
{
|
||||
__sinit_lock_acquire ();
|
||||
__sfp_lock_acquire ();
|
||||
|
||||
if (s->__cleanup)
|
||||
{
|
||||
__sinit_lock_release ();
|
||||
__sfp_lock_release ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -268,13 +268,12 @@ __sinit (struct _reent *s)
|
|||
stderr_init (s->_stderr);
|
||||
#endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
||||
|
||||
__sinit_lock_release ();
|
||||
__sfp_lock_release ();
|
||||
}
|
||||
|
||||
#ifndef __SINGLE_THREAD__
|
||||
|
||||
__LOCK_INIT_RECURSIVE(static, __sfp_recursive_mutex);
|
||||
__LOCK_INIT_RECURSIVE(static, __sinit_recursive_mutex);
|
||||
|
||||
void
|
||||
__sfp_lock_acquire (void)
|
||||
|
@ -288,18 +287,6 @@ __sfp_lock_release (void)
|
|||
__lock_release_recursive (__sfp_recursive_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
__sinit_lock_acquire (void)
|
||||
{
|
||||
__lock_acquire_recursive (__sinit_recursive_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
__sinit_lock_release (void)
|
||||
{
|
||||
__lock_release_recursive (__sinit_recursive_mutex);
|
||||
}
|
||||
|
||||
/* Walkable file locking routine. */
|
||||
static int
|
||||
__fp_lock (struct _reent * ptr __unused, FILE * fp)
|
||||
|
|
|
@ -287,8 +287,6 @@ char *_llicvt (char *, long long, char);
|
|||
#else
|
||||
void __sfp_lock_acquire (void);
|
||||
void __sfp_lock_release (void);
|
||||
void __sinit_lock_acquire (void);
|
||||
void __sinit_lock_release (void);
|
||||
#endif
|
||||
|
||||
/* Types used in positional argument support in vfprinf/vfwprintf.
|
||||
|
|
Loading…
Reference in New Issue