[PATCH 4/5] posix: Avoid workspace for queued signals
Sebastian Huber
sebastian.huber at embedded-brains.de
Tue Apr 9 07:10:47 UTC 2019
---
cpukit/include/rtems/confdefs.h | 4 ++++
cpukit/include/rtems/posix/psignal.h | 2 ++
cpukit/posix/src/psignal.c | 26 +++++++++-----------------
3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index dfc917ccfe..066919a7dc 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -2862,6 +2862,10 @@ struct _reent *__getreent(void)
#if CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS > 0
const uint32_t _POSIX_signals_Maximum_queued_signals =
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS;
+
+ POSIX_signals_Siginfo_node _POSIX_signals_Siginfo_nodes[
+ CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+ ];
#endif
#if CONFIGURE_MAXIMUM_POSIX_TIMERS > 0
diff --git a/cpukit/include/rtems/posix/psignal.h b/cpukit/include/rtems/posix/psignal.h
index 4632128598..4a078c57aa 100644
--- a/cpukit/include/rtems/posix/psignal.h
+++ b/cpukit/include/rtems/posix/psignal.h
@@ -33,5 +33,7 @@ typedef struct {
extern const uint32_t _POSIX_signals_Maximum_queued_signals;
+extern POSIX_signals_Siginfo_node _POSIX_signals_Siginfo_nodes[];
+
#endif
/* end of file */
diff --git a/cpukit/posix/src/psignal.c b/cpukit/posix/src/psignal.c
index 3a1bd41cad..545abab476 100644
--- a/cpukit/posix/src/psignal.c
+++ b/cpukit/posix/src/psignal.c
@@ -100,10 +100,7 @@ Chain_Control _POSIX_signals_Siginfo[ SIG_ARRAY_MAX ];
static void _POSIX_signals_Manager_Initialization(void)
{
- uint32_t signo;
- uint32_t maximum_queued_signals;
-
- maximum_queued_signals = _POSIX_signals_Maximum_queued_signals;
+ uint32_t signo;
memcpy(
_POSIX_signals_Vectors,
@@ -121,21 +118,16 @@ static void _POSIX_signals_Manager_Initialization(void)
/*
* Allocate the siginfo pools.
*/
- for ( signo=1 ; signo<= SIGRTMAX ; signo++ )
+ for ( signo=1 ; signo<= SIGRTMAX ; signo++ ) {
_Chain_Initialize_empty( &_POSIX_signals_Siginfo[ signo ] );
-
- if ( maximum_queued_signals ) {
- _Chain_Initialize(
- &_POSIX_signals_Inactive_siginfo,
- _Workspace_Allocate_or_fatal_error(
- maximum_queued_signals * sizeof( POSIX_signals_Siginfo_node )
- ),
- maximum_queued_signals,
- sizeof( POSIX_signals_Siginfo_node )
- );
- } else {
- _Chain_Initialize_empty( &_POSIX_signals_Inactive_siginfo );
}
+
+ _Chain_Initialize(
+ &_POSIX_signals_Inactive_siginfo,
+ &_POSIX_signals_Siginfo_nodes[ 0 ],
+ _POSIX_signals_Maximum_queued_signals,
+ sizeof( POSIX_signals_Siginfo_nodes[ 0 ] )
+ );
}
RTEMS_SYSINIT_ITEM(
--
2.16.4
More information about the devel
mailing list