Patch so realloc reverts to old buffer if reallocation fails.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1170 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Steven Dake 2006-07-28 23:34:28 +00:00
parent 8f4a055b5a
commit 6a00f63ff9
11 changed files with 75 additions and 35 deletions

View File

@ -1,5 +1,6 @@
/*
* Copyright (c) 2003-2004 MontaVista Software, Inc.
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
*
@ -170,7 +171,7 @@ int poll_dispatch_add (
poll_entries = (struct poll_entry *)realloc (poll_instance->poll_entries,
(poll_instance->poll_entry_count + 1) *
sizeof (struct poll_entry));
if (poll_entries == 0) {
if (poll_entries == NULL) {
res = -ENOMEM;
goto error_put;
}
@ -179,7 +180,7 @@ int poll_dispatch_add (
ufds = (struct pollfd *)realloc (poll_instance->ufds,
(poll_instance->poll_entry_count + 1) *
sizeof (struct pollfd));
if (ufds == 0) {
if (ufds == NULL) {
res = -ENOMEM;
goto error_put;
}

View File

@ -1,19 +1,20 @@
/** @file amfcomp.c
*
* Copyright (c) 2002-2006 MontaVista Software, Inc.
* Copyright (c) 2006 Sun Microsystems, Inc.
* Copyright (c) 2006 Ericsson AB.
*
* All rights reserved.
*
* Author: Steven Dake (sdake@mvista.com)
*
* Copyright (c) 2006 Ericsson AB.
* Author: Hans Feldt
* Author: Hans Feldt
* - Introduced AMF B.02 information model
* - Use DN in API and multicast messages
* - (Re-)Introduction of event based multicast messages
* - Refactoring of code into several AMF files
* Author: Anders Eriksson, Lars Holm
* - Component/SU restart, SU failover
*
* All rights reserved.
*
* Author: Anders Eriksson, Lars Holm
* - Component/SU restart, SU failover
*
* This software licensed under BSD license, the text of which follows:
*
@ -249,7 +250,7 @@ static int invocation_create (
if (invocation_addr == 0) {
invocation_temp = (struct invocation *)realloc (invocation_entries,
(invocation_entries_size + 1) * sizeof (struct invocation));
if (invocation_temp == 0) {
if (invocation_temp == NULL) {
return (-1);
}
invocation_entries = invocation_temp;

View File

@ -2561,22 +2561,23 @@ static int recovery_section_create (
*/
if (section_descriptor->section_size
> checkpoint_section->section_descriptor.section_size) {
void *section_data_tmp;
log_printf (LOG_LEVEL_NOTICE,
"recovery_section_create reallocating data. Present Size: %d, New Size: %d\n",
(int)checkpoint_section->section_descriptor.section_size,
(int)section_descriptor->section_size);
checkpoint_section->section_data =
section_data_tmp =
realloc (checkpoint_section->section_data, section_descriptor->section_size);
if (checkpoint_section->section_data == 0) {
if (section_data_tmp == NULL) {
log_printf (LOG_LEVEL_ERROR,
"recovery_section_create section_data realloc returned 0 Calling error_exit.\n");
"recovery_section_create section_data realloc returned NULL Calling error_exit.\n");
error = SA_AIS_ERR_NO_MEMORY;
checkpoint_section_release(checkpoint_section);
goto error_exit;
}
checkpoint_section->section_data = section_data_tmp;
checkpoint_section->section_descriptor.section_size = section_descriptor->section_size;
error = SA_AIS_OK;
@ -3107,8 +3108,8 @@ static void message_handler_req_exec_ckpt_sectionwrite (
req_exec_ckpt_sectionwrite->data_size;
if (size_required > checkpoint_section->section_descriptor.section_size) {
section_data = realloc (checkpoint_section->section_data, size_required);
if (section_data == 0) {
log_printf (LOG_LEVEL_ERROR, "section_data realloc returned 0 Calling error_exit.\n");
if (section_data == NULL) {
log_printf (LOG_LEVEL_ERROR, "section_data realloc returned NULL Calling error_exit.\n");
error = SA_AIS_ERR_NO_MEMORY;
goto error_exit;
}

View File

@ -546,8 +546,9 @@ static void remove_node_from_groups(
list_del(&gi->rg->list);
newsize = gi->rg->left_list_size * 2;
newrg = realloc(gi->rg, sizeof(struct removed_group) + newsize*sizeof(mar_cpg_address_t));
if (!newrg) {
newrg = realloc (gi->rg,
sizeof(struct removed_group) + newsize * sizeof(mar_cpg_address_t));
if (newrg == NULL) {
log_printf(LOG_LEVEL_CRIT, "Unable to realloc removed group struct. CPG callbacks will be junk.");
return;
}

View File

@ -1,12 +1,12 @@
/*
* Copyright (c) 2004-2006 MontaVista Software, Inc.
* Copyright (c) 2006 Red Hat, Inc.
* Author: Steven Dake (sdake@mvista.com)
*
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
*
* Author: Steven Dake (sdake@mvista.com)
*
* This software licensed under BSD license, the text of which follows:
*
* Redistribution and use in source and binary forms, with or without
@ -290,7 +290,7 @@ static void message_handler_req_evs_join (void *conn, void *msg)
addr = realloc (evs_pd->groups, sizeof (struct evs_group) *
(evs_pd->group_entries + req_lib_evs_join->group_entries));
if (addr == 0) {
if (addr == NULL) {
error = SA_AIS_ERR_NO_MEMORY;
goto exit_error;
}

View File

@ -1,7 +1,6 @@
/*
* Copyright (c) 2004-2006 Mark Haverkamp
* Copyright (c) 2004-2006 Open Source Development Lab
*
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
@ -869,14 +868,17 @@ static struct event_svr_channel_instance *create_channel(mar_name_t *cn)
*/
static int check_open_size(struct event_svr_channel_instance *eci)
{
struct open_count *esc_node_opens_tmp;
if (total_member_count > eci->esc_oc_size) {
eci->esc_node_opens = realloc(eci->esc_node_opens,
esc_node_opens_tmp = realloc (eci->esc_node_opens,
sizeof(struct open_count) * total_member_count);
if (!eci->esc_node_opens) {
if (esc_node_opens_tmp == NULL) {
log_printf(LOG_LEVEL_WARNING,
"Memory error realloc of node list\n");
return -1;
}
eci->esc_node_opens = esc_node_opens_tmp;
memset(&eci->esc_node_opens[eci->esc_oc_size], 0,
sizeof(struct open_count) *
(total_member_count - eci->esc_oc_size));
@ -1636,8 +1638,15 @@ evt_delivered(struct event_data *evt, struct event_svr_channel_open *eco)
log_printf(LOG_LEVEL_DEBUG, "delivered ID %llx to eco %p\n",
(unsigned long long)evt->ed_event.led_event_id, eco);
if (evt->ed_delivered_count == evt->ed_delivered_next) {
evt->ed_delivered = realloc(evt->ed_delivered,
struct event_svr_channel_open *ed_delivered_tmp;
ed_delivered_tmp = realloc (evt->ed_delivered,
DELIVER_SIZE * sizeof(struct event_svr_channel_open *));
if (ed_delivered_tmp == NULL) {
log_printf(LOG_LEVEL_WARNING, "Memory error realloc\n");
return;
}
evt->ed_delivered = ed_delivered_tmp;
memset(evt->ed_delivered + evt->ed_delivered_next, 0,
DELIVER_SIZE * sizeof(struct event_svr_channel_open *));
evt->ed_delivered_next = evt->ed_delivered_count;

View File

@ -204,10 +204,14 @@ int openais_main_config_read (
"logger",
strlen ("logger"),
&object_logger_handle) == 0) {
main_config->logger =
realloc(main_config->logger,
sizeof(struct logger_config) *
(main_config->loggers + 1));
struct logger_config *logger_tmp;
logger_tmp = realloc (main_config->logger,
sizeof(struct logger_config) * (main_config->loggers + 1));
if (logger_tmp == NULL) {
error_reason = "no more memory";
goto other_error;
}
main_config->logger = logger_tmp;
i = main_config->loggers;
main_config->loggers++;
memset(&main_config->logger[i], 0, sizeof(struct logger_config));
@ -296,6 +300,14 @@ int openais_main_config_read (
return 0;
other_error:
sprintf (error_string_response,
"error parsing config: %s.\n",
error_reason);
*error_string = error_string_response;
return -1;
parse_error:
sprintf (error_string_response,
"parse error in config: %s.\n",

View File

@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Red Hat Inc
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
*
@ -329,14 +330,24 @@ int totemip_iface_check(struct totem_ip_address *bindnet,
* Generate list of local interfaces in ifc.ifc_req structure
*/
id_fd = socket (AF_INET, SOCK_DGRAM, 0);
ifc.ifc_buf = 0;
ifc.ifc_buf = NULL;
do {
void *ifc_buf_tmp;
numreqs += 32;
ifc.ifc_len = sizeof (struct ifreq) * numreqs;
ifc.ifc_buf = (void *)realloc(ifc.ifc_buf, ifc.ifc_len);
ifc_buf_tmp = realloc (ifc.ifc_buf, ifc.ifc_len);
if (ifc_buf_tmp == NULL) {
close (id_fd);
if (ifc.ifc_buf != NULL) {
free (ifc.ifc_buf);
}
return -1;
}
ifc.ifc_buf = ifc_buf_tmp;
res = ioctl (id_fd, SIOCGIFCONF, &ifc);
if (res < 0) {
close (id_fd);
free (ifc.ifc_buf);
return -1;
}
} while (ifc.ifc_len == sizeof (struct ifreq) * numreqs);
@ -393,7 +404,9 @@ int totemip_iface_check(struct totem_ip_address *bindnet,
}
}
}
free (ifc.ifc_buf);
if (ifc.ifc_buf != NULL) {
free (ifc.ifc_buf);
}
close (id_fd);
return (res);

View File

@ -950,7 +950,7 @@ int totempg_groups_join (
new_groups = realloc (instance->groups,
sizeof (struct totempg_group) *
(instance->groups_cnt + group_cnt));
if (new_groups == 0) {
if (new_groups == NULL) {
res = ENOMEM;
goto error_exit;
}

View File

@ -1,5 +1,6 @@
/*
* Copyright (c) 2002-2006 MontaVista Software, Inc.
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
*
@ -99,7 +100,7 @@ static inline int hdb_handle_create (
handle_database->handle_count += 1;
new_handles = (struct hdb_handle *)realloc (handle_database->handles,
sizeof (struct hdb_handle) * handle_database->handle_count);
if (new_handles == 0) {
if (new_handles == NULL) {
pthread_mutex_unlock (&handle_database->mutex);
return (-1);
}

View File

@ -2,6 +2,7 @@
* vi: set autoindent tabstop=4 shiftwidth=4 :
*
* Copyright (c) 2002-2006 MontaVista Software, Inc.
* Copyright (c) 2006 Sun Microsystems, Inc.
*
* All rights reserved.
*
@ -532,7 +533,7 @@ saHandleCreate (
handleDatabase->handleCount += 1;
newHandles = (struct saHandle *)realloc (handleDatabase->handles,
sizeof (struct saHandle) * handleDatabase->handleCount);
if (newHandles == 0) {
if (newHandles == NULL) {
pthread_mutex_unlock (&handleDatabase->mutex);
return (SA_AIS_ERR_NO_MEMORY);
}