[PATCH 12/17] libbsp/shared/console.c: Clean up memory allocation for per device data

Joel Sherrill joel at rtems.org
Thu Mar 10 16:35:33 UTC 2016


On Wed, Mar 9, 2016 at 8:15 PM, Gedare Bloom <gedare at rtems.org> wrote:

> On Wed, Mar 9, 2016 at 5:24 PM, Joel Sherrill <joel at rtems.org> wrote:
> > ---
> >  c/src/lib/libbsp/shared/console.c | 49
> ++++++++++++++++++++++++++++-----------
> >  1 file changed, 36 insertions(+), 13 deletions(-)
> >
> > diff --git a/c/src/lib/libbsp/shared/console.c
> b/c/src/lib/libbsp/shared/console.c
> > index 81a70b1..d030065 100644
> > --- a/c/src/lib/libbsp/shared/console.c
> > +++ b/c/src/lib/libbsp/shared/console.c
> > @@ -7,7 +7,7 @@
> >   */
> >
> >  /*
> > - *  COPYRIGHT (c) 1989-2011.
> > + *  COPYRIGHT (c) 1989-2011, 2016.
> >   *  On-Line Applications Research Corporation (OAR).
> >   *
> >   *  The license and distribution terms for this file may be
> > @@ -46,13 +46,28 @@ void console_initialize_data(void)
> >    if ( Console_Port_Tbl )
> >      return;
> >
> > +  /*
> > +   * Allocate memory for the table of device pointers.
> > +   */
> >    Console_Port_Count = Console_Configuration_Count;
> >    Console_Port_Tbl   = malloc( Console_Port_Count * sizeof( console_tbl
> * ) );
> >    if (Console_Port_Tbl == NULL)
> >      bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_0 );
> >
> > -  for (i=0 ; i < Console_Port_Count ; i++)
> > +  /*
> > +   * Allocate memory for the table of device specific data pointers.
> > +   */
> > +  Console_Port_Data  = calloc( Console_Port_Count, sizeof( console_data
> ) );
> why calloc ...
>
>
Good catch. Likely already there but just wasted time. Changing to malloc().


> > +  if ( Console_Port_Data == NULL ) {
> > +    bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_3 );
> > +  }
> > +
> > +  /*
> > +   * Fill in the Console Table
> > +   */
> > +  for (i=0 ; i < Console_Port_Count ; i++) {
> >      Console_Port_Tbl[i] = &Console_Configuration_Ports[i];
> > +  }
> ... if you will immediately initialize it
>
> >  }
> >
> >  /*
> > @@ -69,10 +84,13 @@ void console_register_devices(
> >    int  old_number_of_ports;
> >    int  i;
> >
> > +  /*
> > +   * Initialize the console data elements
> > +   */
> >    console_initialize_data();
> >
> >    /*
> > -   *  console_initialize has been invoked so it is now too late to
> > +   *  console_initialize() has been invoked so it is now too late to
> >     *  register devices.
> >     */
> >    if ( console_initialized ) {
> > @@ -86,23 +104,31 @@ void console_register_devices(
> >    Console_Port_Count += number_of_ports;
> >    Console_Port_Tbl = realloc(
> >      Console_Port_Tbl,
> > -    Console_Port_Count * sizeof( console_tbl * )
> > +    Console_Port_Count * sizeof(console_tbl *)
> >    );
> >    if ( Console_Port_Tbl == NULL ) {
> >      bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_1 );
> >    }
> >
> > -  Console_Port_Data  = calloc( Console_Port_Count, sizeof( console_data
> ) );
> > +  /*
> > +   * Since we can only add devices before console_initialize(),
> > +   * the data area will contain no information and must be zero
> > +   * before it is used. So extend the area and zero it out.
> > +   */
> > +  Console_Port_Data = realloc(
> > +    Console_Port_Data,
> > +    Console_Port_Count * sizeof(console_tbl *)
> > +  );
> >    if ( Console_Port_Data == NULL ) {
> >      bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_2 );
> >    }
> > +  memset(&Console_Port_Data, '\0', Console_Port_Count *
> sizeof(console_tbl *));
> >
> >    /*
> >     *  Now add the new devices at the end.
> >     */
> > -
> >    for (i=0 ; i < number_of_ports ; i++) {
> > -    Console_Port_Tbl[old_number_of_ports + i] = &new_ports[i];
> > +    Console_Port_Tbl[old_number_of_ports + i]  = &new_ports[i];
> >    }
> >  }
> >
> > @@ -249,14 +275,11 @@ rtems_device_driver console_initialize(
> >
> >    /*
> >     * If we have no devices which were registered earlier then we
> > -   * must still initialize pointers and set Console_Port_Data.
> > +   * must still initialize pointers for Console_Port_Tbl and
> > +   * Console_Port_Data.
> >     */
> > -  if ( ! Console_Port_Tbl ) {
> > +  if ( !Console_Port_Tbl ) {
> >      console_initialize_data();
> > -    Console_Port_Data  = calloc( Console_Port_Count, sizeof(
> console_data ) );
> > -    if ( Console_Port_Data == NULL ) {
> > -      bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_3 );
> > -    }
> >    }
> >
> >    /*
> > --
> > 1.8.3.1
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160310/f216866c/attachment-0002.html>


More information about the devel mailing list