a buffer of double size is mapped into the system, but only half of it
is unmapped in both the client and library.


Index: exec/coroipcs.c
===================================================================
--- exec/coroipcs.c	(revision 2112)
+++ exec/coroipcs.c	(working copy)
@@ -144,6 +144,16 @@
 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 @@
 		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);
Index: lib/coroipcc.c
===================================================================
--- lib/coroipcc.c	(revision 2112)
+++ lib/coroipcc.c	(working copy)
@@ -481,7 +481,7 @@
 	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);
 }
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to