On Thu, Feb 18, 2021 at 11:56 PM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > On 18/02/2021 20:25, Joel Sherrill wrote: > > > > - /* > > > - * api may be NULL in case of a thread close in progress > > > - */ > > > - if ( !api ) > > > - return; > > > - > > I believe you, but should we replace this with an assert for now? > > > > > > And a comment explaining why it can't be NULL. > > This is not the only place which uses > > api = executing->API_Extensions[ THREAD_API_POSIX ]; > > or > > api = executing->API_Extensions[ THREAD_API_RTEMS ]; > > I don't think it makes sense to add a comment to all these places. > > While looking at this, I think we should remove this API_Extensions > indirection and add the structures directly to Thread_Control. This > makes the code more efficient, simpler, faster, and easier to debug. >
I think this makes sense from an object-oriented perspective. But, does it (greatly) increase the memory consumption for a system that uses classic tasks but enables posix? > We just have to move a couple of typedefs to score to define these > structures in thread.h. > > #if defined(RTEMS_POSIX_API) > /** > * This defines the POSIX API support structure associated with > * each thread in a system with POSIX configured. > */ > typedef struct { > /** > * @brief Control block for the sporadic server scheduling policy. > */ > struct { > /** The thread of this sporadic control block */ > Thread_Control *thread; > > /** > * @brief This is the timer which controls when the thread executes > at high > * and low priority when using the sporadic server scheduling policy. > */ > Watchdog_Control Timer; > > /** > * @brief The low priority when using the sporadic server scheduling > * policy. > */ > Priority_Node Low_priority; > > /** > * @brief Replenishment period for sporadic server. > */ > struct timespec sched_ss_repl_period; > > /** > * @brief Initial budget for sporadic server. > */ > struct timespec sched_ss_init_budget; > > /** > * @brief Maximum pending replenishments. > * > * Only used by pthread_getschedparam() and pthread_getattr_np(). > */ > int sched_ss_max_repl; > } Sporadic; > > /** This is the set of signals which are currently unblocked. */ > sigset_t signals_unblocked; > /** This is the set of signals which are currently pending. */ > sigset_t signals_pending; > > /** > * @brief Signal post-switch action in case signals are pending. > */ > Thread_Action Signal_action; > } POSIX_API_Control; > > /** > * This is the API specific information required by each thread for > * the RTEMS API to function correctly. > * > */ > typedef struct { > /** This field contains the event control for this task. */ > Event_Control Event; > /** This field contains the system event control for this task. */ > Event_Control System_event; > /** This field contains the Classic API Signal information for this > task. */ > ASR_Information Signal; > > /** > * @brief Signal post-switch action in case signals are pending. > */ > Thread_Action Signal_action; > } RTEMS_API_Control; > > -- > embedded brains GmbH > Herr Sebastian HUBER > Dornierstr. 4 > 82178 Puchheim > Germany > email: sebastian.hu...@embedded-brains.de > phone: +49-89-18 94 741 - 16 > fax: +49-89-18 94 741 - 08 > > Registergericht: Amtsgericht München > Registernummer: HRB 157899 > Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler > Unsere Datenschutzerklärung finden Sie hier: > https://embedded-brains.de/datenschutzerklaerung/ > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel