[Mono-dev] [PATCH] mono/io-layer/shared.c sends non-existant file to ftok for Linux
cpMon
page.cal at gmail.com
Fri Mar 5 12:21:52 EST 2010
The shared memory files are created in /dev/shm/... on linux, but the code
tries to find them in your home account. Since the file doesn't exist, a 0
is returned from ftok. This results in a pileup of shm's and semaphores. Run
ipcs -a after every run to see the probmem.
Cal Page
Here's the patch:
Index: mono/io-layer/shared.c
===================================================================
RCS file: /usr/local/teradyne/cvsroot/mono-2.6.1/mono/io-layer/shared.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -8 -p -r1.1 -r1.2
--- mono/io-layer/shared.c 25 Feb 2010 12:36:10 -0000 1.1
+++ mono/io-layer/shared.c 26 Feb 2010 14:26:41 -0000 1.2
@@ -476,16 +476,19 @@ _wapi_shm_attach (_wapi_shm_t type)
static void
shm_semaphores_init (void)
{
key_t key;
key_t oldkey;
int thr_ret;
struct _WapiHandleSharedLayout *tmp_shared;
+
+ gchar *ftmp;
+ gchar *filename;
/*
* Yet more barmy API - this union is a well-defined parameter
* in a syscall, yet I still have to define it here as it
* doesn't appear in a header
*/
union semun {
int val;
@@ -514,18 +517,26 @@ shm_semaphores_init (void)
* after getting the semaphores to avoid a race condition
* where a terminating process can delete the shared files
* between a new process attaching the file and getting access
* to the semaphores (which increments the process count,
* preventing destruction of the shared data...)
*/
tmp_shared = _wapi_shm_attach (WAPI_SHM_DATA);
g_assert (tmp_shared != NULL);
-
- key = ftok (_wapi_shm_file (WAPI_SHM_DATA), 'M');
+
+#ifdef USE_SHM
+ filename =
g_build_filename("/dev/shm",(ftmp=_wapi_shm_shm_name(WAPI_SHM_DATA)),NULL);
+ g_assert(filename!=NULL);
+ key = ftok ( filename, 'M');
+ g_free(ftmp);
+ g_free(filename);
+#else
+ key = ftok ( _wapi_shm_file (WAPI_SHM_DATA), 'M');
+#endif
again:
retries++;
oldkey = tmp_shared->sem_key;
if (oldkey == 0) {
DEBUGLOG ("%s: Creating with new key (0x%x)", __func__, key);
--
View this message in context: http://n4.nabble.com/PATCH-mono-io-layer-shared-c-sends-non-existant-file-to-ftok-for-Linux-tp1579884p1579884.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
More information about the Mono-devel-list
mailing list