[PATCH 12/17] libbsp/shared/console.c: Clean up memory allocation for per device data
Gedare Bloom
gedare at rtems.org
Thu Mar 10 02:15:32 UTC 2016
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 ...
> + 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
More information about the devel
mailing list