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
|
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
|
<<__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
|
INDEX
|
||||||
__lock___sfp_recursive_mutex
|
__lock___sfp_recursive_mutex
|
||||||
INDEX
|
INDEX
|
||||||
|
@ -44,7 +42,6 @@ INDEX
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
#include <lock.h>
|
#include <lock.h>
|
||||||
struct __lock __lock___sinit_recursive_mutex;
|
|
||||||
struct __lock __lock___sfp_recursive_mutex;
|
struct __lock __lock___sfp_recursive_mutex;
|
||||||
struct __lock __lock___atexit_recursive_mutex;
|
struct __lock __lock___atexit_recursive_mutex;
|
||||||
struct __lock __lock___at_quick_exit_mutex;
|
struct __lock __lock___at_quick_exit_mutex;
|
||||||
|
@ -92,7 +89,6 @@ struct __lock {
|
||||||
char unused;
|
char unused;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct __lock __lock___sinit_recursive_mutex;
|
|
||||||
struct __lock __lock___sfp_recursive_mutex;
|
struct __lock __lock___sfp_recursive_mutex;
|
||||||
struct __lock __lock___atexit_recursive_mutex;
|
struct __lock __lock___atexit_recursive_mutex;
|
||||||
struct __lock __lock___at_quick_exit_mutex;
|
struct __lock __lock___at_quick_exit_mutex;
|
||||||
|
|
|
@ -235,11 +235,11 @@ cleanup_stdio (struct _reent *ptr)
|
||||||
void
|
void
|
||||||
__sinit (struct _reent *s)
|
__sinit (struct _reent *s)
|
||||||
{
|
{
|
||||||
__sinit_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
if (s->__cleanup)
|
if (s->__cleanup)
|
||||||
{
|
{
|
||||||
__sinit_lock_release ();
|
__sfp_lock_release ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,13 +268,12 @@ __sinit (struct _reent *s)
|
||||||
stderr_init (s->_stderr);
|
stderr_init (s->_stderr);
|
||||||
#endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
#endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
|
||||||
__sinit_lock_release ();
|
__sfp_lock_release ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __SINGLE_THREAD__
|
#ifndef __SINGLE_THREAD__
|
||||||
|
|
||||||
__LOCK_INIT_RECURSIVE(static, __sfp_recursive_mutex);
|
__LOCK_INIT_RECURSIVE(static, __sfp_recursive_mutex);
|
||||||
__LOCK_INIT_RECURSIVE(static, __sinit_recursive_mutex);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
__sfp_lock_acquire (void)
|
__sfp_lock_acquire (void)
|
||||||
|
@ -288,18 +287,6 @@ __sfp_lock_release (void)
|
||||||
__lock_release_recursive (__sfp_recursive_mutex);
|
__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. */
|
/* Walkable file locking routine. */
|
||||||
static int
|
static int
|
||||||
__fp_lock (struct _reent * ptr __unused, FILE * fp)
|
__fp_lock (struct _reent * ptr __unused, FILE * fp)
|
||||||
|
|
|
@ -287,8 +287,6 @@ char *_llicvt (char *, long long, char);
|
||||||
#else
|
#else
|
||||||
void __sfp_lock_acquire (void);
|
void __sfp_lock_acquire (void);
|
||||||
void __sfp_lock_release (void);
|
void __sfp_lock_release (void);
|
||||||
void __sinit_lock_acquire (void);
|
|
||||||
void __sinit_lock_release (void);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Types used in positional argument support in vfprinf/vfwprintf.
|
/* Types used in positional argument support in vfprinf/vfwprintf.
|
||||||
|
|
Loading…
Reference in New Issue