[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:39:20 UTC 2016
On Thu, Mar 10, 2016 at 10:35 AM, Joel Sherrill <joel at rtems.org> wrote:
>
>
> 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().
>
I think we both misread it. The calloc() is for data per port. The copy is
copying
the per port configuration data. They are different. Notice
Console_Port_Data
vs Console_Port_Tbl.
I think this is OK on closer look.
Anything else.
>
>
>> > + 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/5221ac3a/attachment-0002.html>
More information about the devel
mailing list