[PATCH 05/13] posix: Remove superfluous check

Gedare Bloom gedare at rtems.org
Fri Feb 19 16:31:32 UTC 2021


On Thu, Feb 18, 2021 at 11:56 PM Sebastian Huber
<sebastian.huber at 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.huber at 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/
>


More information about the devel mailing list