Bladeren bron

Remove memory leak from new dispatch circular buffer mapped system.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2113 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 17 jaren geleden
bovenliggende
commit
6951637ea5
2 gewijzigde bestanden met toevoegingen van 12 en 2 verwijderingen
  1. 11 1
      exec/coroipcs.c
  2. 1 1
      lib/coroipcc.c

+ 11 - 1
exec/coroipcs.c

@@ -144,6 +144,16 @@ static void ipc_disconnect (struct conn_info *conn_info);
 static void msg_send (void *conn, const struct iovec *iov, unsigned int iov_len,
 		      int locked);
 
+static inline int
+coroipcs_circular_memory_unmap (void *buf, size_t bytes)
+{
+	int res;
+
+	res = munmap (buf, bytes << 1);
+
+	return (res);
+}
+
 static int ipc_thread_active (void *conn)
 {
 	struct conn_info *conn_info = (struct conn_info *)conn;
@@ -240,7 +250,7 @@ static inline int conn_info_destroy (struct conn_info *conn_info)
 		api->free (conn_info->private_data);
 	}
 	close (conn_info->fd);
-	munmap (conn_info->dispatch_buffer, (DISPATCH_SIZE));
+	res = coroipcs_circular_memory_unmap (conn_info->dispatch_buffer, DISPATCH_SIZE);
 	api->free (conn_info);
 	api->serialize_unlock ();
 	return (-1);

+ 1 - 1
lib/coroipcc.c

@@ -481,7 +481,7 @@ coroipcc_service_disconnect (
 	shutdown (ipc_segment->fd, SHUT_RDWR);
 	close (ipc_segment->fd);
 	shmdt (ipc_segment->shared_memory);
-	coroipcc_memory_unmap (ipc_segment->dispatch_buffer, (DISPATCH_SIZE));
+	coroipcc_memory_unmap (ipc_segment->dispatch_buffer, (DISPATCH_SIZE) << 1);
 	free (ipc_segment);
 	return (CS_OK);
 }