mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-24 06:07:23 +08:00
configure: Remove envlock support
This is provided by Newlib itself.
This commit is contained in:
@@ -70,9 +70,6 @@ AC_CHECK_DECLS([funlockfile],[AC_CHECK_FUNCS([funlockfile])],,[#include <stdio.h
|
||||
AC_CHECK_DECLS([ftrylockfile],[AC_CHECK_FUNCS([ftrylockfile])],,[#include <stdio.h>])
|
||||
|
||||
# Newlib proprietary
|
||||
AC_CHECK_HEADERS([envlock.h])
|
||||
AC_CHECK_DECLS([__env_lock],,,[#include <envlock.h>])
|
||||
AC_CHECK_DECLS([__env_unlock],,,[#include <envlock.h>])
|
||||
AC_CHECK_TYPES([struct _Thread_queue_Queue],[],[],[#include <sys/lock.h>])
|
||||
AC_CHECK_MEMBER([struct _Thread_queue_Queue._name],[],[RTEMS_TOOL_CHAIN_ERROR],[#include <sys/lock.h>])
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ libcsupport_a_SOURCES += src/printertask.c
|
||||
|
||||
libcsupport_a_SOURCES += $(LIBC_GLUE_C_FILES) $(PASSWORD_GROUP_C_FILES) \
|
||||
$(TERMINAL_IDENTIFICATION_C_FILES) $(SYSTEM_CALL_C_FILES) \
|
||||
$(DIRECTORY_SCAN_C_FILES) $(ID_C_FILES) src/envlock.c \
|
||||
$(DIRECTORY_SCAN_C_FILES) $(ID_C_FILES) \
|
||||
$(TERMIOS_C_FILES) src/getpagesize.c src/getrusage.c src/posix_devctl.c
|
||||
|
||||
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief Global Environment Lock Support
|
||||
* @ingroup libcsupport
|
||||
*/
|
||||
|
||||
/*
|
||||
* Author: Till Straumann <strauman@slac.stanford.edu>, 3/2002
|
||||
*/
|
||||
|
||||
/* provide locking for the global environment 'environ' */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ENVLOCK_H) \
|
||||
&& defined(HAVE_DECL___ENV_LOCK) && defined(HAVE_DECL___ENV_UNLOCK)
|
||||
|
||||
#include <envlock.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <sys/reent.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* NOTES:
|
||||
* - although it looks like a classical multiple-readers / single writer (MRSW)
|
||||
* locking problem, we still use a single lock for the following reasons:
|
||||
* 1) newlib has no provision / hook for calling different locking routines
|
||||
* from setenv/putenv and getenv, respectively.
|
||||
* 2) MRSW involves calling several semaphore-primitives, even in the most
|
||||
* likely case of a first-reader's access. This probably takes more CPU
|
||||
* time than just waiting until another reader is done; environment
|
||||
* access is fast.
|
||||
* - the lock implementation must allow nesting (same thread may call
|
||||
* lock-lock-unlock-unlock).
|
||||
* - NEWLIB-1.8.2 has an ugly BUG: if environ is NULL, _findenv_r() bails
|
||||
* out leaving the lock held :-(
|
||||
*
|
||||
* Used by the following functions:
|
||||
* findenv_r(), setenv_r(), and unsetenv_r() which are called by
|
||||
* getenv(), getenv_r(), setenv(), and unsetenv().
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(ENVLOCK_DEDICATED_MUTEX)
|
||||
static rtems_id envLock=0;
|
||||
|
||||
static void
|
||||
__rtems_envlock_init(void)
|
||||
{
|
||||
extern char **environ;
|
||||
rtems_status_code rc;
|
||||
|
||||
if (envLock) /* already initialized */
|
||||
return;
|
||||
|
||||
assert(environ && "MUST have non-NULL 'environ' due to newlib bug");
|
||||
|
||||
rc = rtems_semaphore_create(
|
||||
rtems_build_name('E','N','V','S'),
|
||||
1,
|
||||
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
|
||||
0,
|
||||
&envLock);
|
||||
if (RTEMS_SUCCESSFUL!=rc)
|
||||
rtems_fatal_error_occurred(rc);
|
||||
}
|
||||
|
||||
void
|
||||
__env_lock(struct _reent *r)
|
||||
{
|
||||
/* Do lazy init */
|
||||
if (!envLock)
|
||||
__rtems_envlock_init();
|
||||
/*
|
||||
* Must not use a semaphore before pre-tasking hook is called.
|
||||
* - it will corrupt memory :-(
|
||||
*/
|
||||
|
||||
if (_Thread_Executing)
|
||||
rtems_semaphore_obtain(envLock, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
|
||||
}
|
||||
|
||||
void
|
||||
__env_unlock(struct _reent *r)
|
||||
{
|
||||
/*
|
||||
* Must not use a semaphore before pre-tasking hook is called.
|
||||
* - it will corrupt memory :-(
|
||||
*/
|
||||
if (_Thread_Executing)
|
||||
rtems_semaphore_release(envLock);
|
||||
}
|
||||
#else
|
||||
|
||||
/*
|
||||
* Reuse the libio mutex -- it is always initialized before we
|
||||
* could possibly run.
|
||||
*/
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
void
|
||||
__env_lock(struct _reent *r RTEMS_UNUSED)
|
||||
{
|
||||
rtems_libio_lock();
|
||||
}
|
||||
|
||||
void
|
||||
__env_unlock(struct _reent *r RTEMS_UNUSED)
|
||||
{
|
||||
rtems_libio_unlock();
|
||||
}
|
||||
#endif /* ENVLOCK_DEDICATED_MUTEX */
|
||||
|
||||
#endif /* HAVE_ENVLOCK_H ... */
|
||||
Reference in New Issue
Block a user