On 06/21/2011 04:23 AM, Hannes Reinecke wrote:
> When the startup mode has been specified in iscsid.conf it
> needs to be kept in sync for both settings, 'node.startup'
> and 'node.conn[0].startup'.
>
> References: bnc#458142
>
> Signed-off-by: Hannes Reinecke <[email protected]>
> ---
> usr/idbm.c | 25 ++++++++++++++++++++++++-
> 1 files changed, 24 insertions(+), 1 deletions(-)
>
> diff --git a/usr/idbm.c b/usr/idbm.c
> index a73b410..1f01535 100644
> --- a/usr/idbm.c
> +++ b/usr/idbm.c
> @@ -598,6 +598,8 @@ void idbm_recinfo_config(recinfo_t *info, FILE *f)
> char name[NAME_MAXVAL];
> char value[VALUE_MAXVAL];
> char *line, *nl, buffer[2048];
> + char *node_startup_value = NULL;
> + char *conn_startup_value = NULL;
> int line_number = 0;
> int c = 0, i;
>
> @@ -656,8 +658,29 @@ void idbm_recinfo_config(recinfo_t *info, FILE *f)
> }
> *(value+i) = 0;
>
> - idbm_rec_update_param(info, name, value, line_number);
> + if (!strcmp(name, "node.startup")) {
> + node_startup_value = strdup(value);
> + }
> + if (!strcmp(name, "node.conn[0].startup")) {
> + conn_startup_value = strdup(value);
> + }
> + (void)idbm_rec_update_param(info, name, value, line_number);
> } while (line);
> + /*
> + * Compat hack:
> + * Keep node.startup and node.conn[0].startup in sync even
> + * if only one of those has been specified in the config file.
> + */
> + if (node_startup_value && !conn_startup_value) {
> + (void)idbm_rec_update_param(info, "node.conn[0].startup",
> + node_startup_value, -1);
> + free(node_startup_value);
> + }
> + if (conn_startup_value && !node_startup_value) {
> + (void)idbm_rec_update_param(info, "node.startup",
> + conn_startup_value, -1);
> + free(conn_startup_value);
> + }
> }
I think this is leaking memory.
If both the conn and node startup are set in the record then we leak.
They are both present in the record by default.
Also I think there is a possible leak if the node or conn startup
strings are present twice. In that case we will leak too. This should
not happen normally.
I made the attached patch and it fixed the leaks.
--
You received this message because you are subscribed to the Google Groups
"open-iscsi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/open-iscsi?hl=en.
diff --git a/usr/idbm.c b/usr/idbm.c
index 2cb346d..d6b795d 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -659,28 +659,32 @@ void idbm_recinfo_config(recinfo_t *info, FILE *f)
*(value+i) = 0;
if (!strcmp(name, "node.startup")) {
+ if (node_startup_value)
+ free(node_startup_value);
node_startup_value = strdup(value);
}
if (!strcmp(name, "node.conn[0].startup")) {
+ if (conn_startup_value)
+ free(conn_startup_value);
conn_startup_value = strdup(value);
}
- (void)idbm_rec_update_param(info, name, value, line_number);
+ idbm_rec_update_param(info, name, value, line_number);
} while (line);
/*
* Compat hack:
* Keep node.startup and node.conn[0].startup in sync even
* if only one of those has been specified in the config file.
*/
- if (node_startup_value && !conn_startup_value) {
- (void)idbm_rec_update_param(info, "node.conn[0].startup",
- node_startup_value, 0);
+ if (node_startup_value && !conn_startup_value)
+ idbm_rec_update_param(info, "node.conn[0].startup",
+ node_startup_value, 0);
+ if (conn_startup_value && !node_startup_value)
+ idbm_rec_update_param(info, "node.startup",
+ conn_startup_value, 0);
+ if (node_startup_value)
free(node_startup_value);
- }
- if (conn_startup_value && !node_startup_value) {
- (void)idbm_rec_update_param(info, "node.startup",
- conn_startup_value, 0);
+ if (conn_startup_value)
free(conn_startup_value);
- }
}
/*