Browse Source

stats: Fix delete of track

When cmap_track_delete was called to stats map (cmap created with
CMAP_MAP_STATS parameter) result was always ERR_BAD_HANDLE.

It turned out that corosync part of cmap is always calling icmap
function to get user data (where required hdb handle is stored)
instead of generalized map_fns.

After fixing this issue, valgrind showed error about jump depending on
unitialized data in stats_map_track_delete. Solution seems to be always
initialize tracker->events (so not only when track_type is add or
delete).

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse 7 years ago
parent
commit
db7eebf817
2 changed files with 3 additions and 2 deletions
  1. 2 1
      exec/cmap.c
  2. 1 1
      exec/stats.c

+ 2 - 1
exec/cmap.c

@@ -848,7 +848,8 @@ static void message_handler_req_lib_cmap_track_delete(void *conn, const void *me
 		goto reply_send;
 	}
 
-	track_inst_handle = ((struct cmap_track_user_data *)icmap_track_get_user_data(*track))->track_inst_handle;
+	track_inst_handle = ((struct cmap_track_user_data *)
+	    conn_info->map_fns.map_track_get_user_data(*track))->track_inst_handle;
 
 	free(conn_info->map_fns.map_track_get_user_data(*track));
 

+ 1 - 1
exec/stats.c

@@ -543,6 +543,7 @@ cs_error_t stats_map_track_add(const char *key_name,
 
 	tracker->notify_fn = notify_fn;
 	tracker->user_data = user_data;
+	tracker->events = track_type;
 	if (key_name) {
 		tracker->key_name = strdup(key_name);
 		if (!tracker->key_name) {
@@ -572,7 +573,6 @@ cs_error_t stats_map_track_add(const char *key_name,
 			free(tracker);
 			return (qb_to_cs_error(err));
 		}
-		tracker->events = track_type;
 	}
 
 	qb_list_add (&tracker->list, &stats_tracker_list_head);