[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