Explorar o código

Handle some valgrind errors

- Memset for res_setup variable in coroipcs:req_setup_send
- Two memset in logsys for buffers
- Problem in corosync_totem_stats_updater where avg_token_holdtime has
size of avg_backlog_calc
- corosync_totem_stats_init where avg_backlog_calc is 32 bits (not 64)
- objdb problem if new_valie_len != object->value_len. In such case
newly allocated memory is not initialized and in some situations,
value_len is not updated.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2787 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jan Friesse %!s(int64=16) %!d(string=hai) anos
pai
achega
12c5f31a89
Modificáronse 4 ficheiros con 9 adicións e 4 borrados
  1. 1 0
      exec/coroipcs.c
  2. 3 0
      exec/logsys.c
  3. 3 4
      exec/main.c
  4. 2 0
      exec/objdb.c

+ 1 - 0
exec/coroipcs.c

@@ -727,6 +727,7 @@ req_setup_send (
 	mar_res_setup_t res_setup;
 	unsigned int res;
 
+	memset (&res_setup, 0, sizeof (res_setup));
 	res_setup.error = error;
 
 retry_send:

+ 3 - 0
exec/logsys.c

@@ -731,6 +731,8 @@ static void *logsys_worker_thread (void *data)
 	int log_msg;
 	char buf[COMBINE_BUFFER_SIZE];
 
+	memset (buf, 0, sizeof (buf));
+
 	/*
 	 * Signal wthread_create that the initialization process may continue
 	 */
@@ -1111,6 +1113,7 @@ int _logsys_rec_init (unsigned int fltsize)
 		return (-1);
 	}
 
+	memset (flt_data, 0, flt_real_size);
 	/*
 	 * flt_data_size tracks data by ints and not bytes/chars.
 	 *

+ 3 - 4
exec/main.c

@@ -655,13 +655,12 @@ static void corosync_totem_stats_updater (void *data)
 		mtt_rx_token = (total_mtt_rx_token / token_count);
 		avg_backlog_calc = (total_backlog_calc / token_count);
 		avg_token_holdtime = (total_token_holdtime / token_count);
-
 		objdb->object_key_replace (stats->mrp->srp->hdr.handle,
 			"mtt_rx_token", strlen("mtt_rx_token"),
 			&mtt_rx_token, sizeof (mtt_rx_token));
 		objdb->object_key_replace (stats->mrp->srp->hdr.handle,
 			"avg_token_workload", strlen("avg_token_workload"),
-			&avg_token_holdtime, sizeof (avg_backlog_calc));
+			&avg_token_holdtime, sizeof (avg_token_holdtime));
 		objdb->object_key_replace (stats->mrp->srp->hdr.handle,
 			"avg_backlog_calc", strlen("avg_backlog_calc"),
 			&avg_backlog_calc, sizeof (avg_backlog_calc));
@@ -782,8 +781,8 @@ static void corosync_totem_stats_init (void)
 			"avg_token_workload", &zero_32,
 			sizeof (zero_32), OBJDB_VALUETYPE_UINT32);
 		objdb->object_key_create_typed (stats->mrp->srp->hdr.handle,
-			"avg_backlog_calc", &zero_64,
-			sizeof (zero_64), OBJDB_VALUETYPE_UINT64);
+			"avg_backlog_calc", &zero_32,
+			sizeof (zero_32), OBJDB_VALUETYPE_UINT32);
 		objdb->object_key_create_typed (stats->mrp->srp->hdr.handle,
 			"rx_msg_dropped", &zero_64,
 			sizeof (zero_64), OBJDB_VALUETYPE_UINT64);

+ 2 - 0
exec/objdb.c

@@ -1316,6 +1316,8 @@ static int object_key_replace (
 				goto error_exit;
 			free(object_key->value);
 			object_key->value = replacement_value;
+			memset (object_key->value, 0, new_value_len);
+			object_key->value_len = new_value_len;
 		}
 		if (memcmp (object_key->value, new_value, new_value_len) == 0) {
 			value_changed = 0;