Hi,<div><br></div><div>  Applied to to SVN HEAD/2.6/2.4 branches.</div><div><br></div><div>             Zoltan<br><br><div class="gmail_quote">On Fri, Mar 5, 2010 at 6:21 PM, cpMon <span dir="ltr">&lt;<a href="mailto:page.cal@gmail.com">page.cal@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
<br>
The shared memory files are created in /dev/shm/... on linux, but the code<br>
tries to find  them in your home account. Since the file doesn&#39;t exist, a 0<br>
is returned from ftok. This results in a pileup of shm&#39;s and semaphores. Run<br>
ipcs -a after every run to see the probmem.<br>
<br>
Cal Page<br>
<br>
Here&#39;s the patch:<br>
Index: mono/io-layer/shared.c<br>
===================================================================<br>
RCS file: /usr/local/teradyne/cvsroot/mono-2.6.1/mono/io-layer/shared.c,v<br>
retrieving revision 1.1<br>
retrieving revision 1.2<br>
diff -u -u -8 -p -r1.1 -r1.2<br>
--- mono/io-layer/shared.c      25 Feb 2010 12:36:10 -0000      1.1<br>
+++ mono/io-layer/shared.c      26 Feb 2010 14:26:41 -0000      1.2<br>
@@ -476,16 +476,19 @@ _wapi_shm_attach (_wapi_shm_t type)<br>
<br>
 static void<br>
 shm_semaphores_init (void)<br>
 {<br>
        key_t key;<br>
        key_t oldkey;<br>
        int thr_ret;<br>
        struct _WapiHandleSharedLayout *tmp_shared;<br>
+<br>
+       gchar *ftmp;<br>
+        gchar *filename;<br>
<br>
        /*<br>
         * Yet more barmy API - this union is a well-defined parameter<br>
         * in a syscall, yet I still have to define it here as it<br>
         * doesn&#39;t appear in a header<br>
         */<br>
        union semun {<br>
                int val;<br>
@@ -514,18 +517,26 @@ shm_semaphores_init (void)<br>
         * after getting the semaphores to avoid a race condition<br>
         * where a terminating process can delete the shared files<br>
         * between a new process attaching the file and getting access<br>
         * to the semaphores (which increments the process count,<br>
         * preventing destruction of the shared data...)<br>
         */<br>
        tmp_shared = _wapi_shm_attach (WAPI_SHM_DATA);<br>
        g_assert (tmp_shared != NULL);<br>
-<br>
-       key = ftok (_wapi_shm_file (WAPI_SHM_DATA), &#39;M&#39;);<br>
+<br>
+#ifdef USE_SHM<br>
+       filename =<br>
g_build_filename(&quot;/dev/shm&quot;,(ftmp=_wapi_shm_shm_name(WAPI_SHM_DATA)),NULL);<br>
+       g_assert(filename!=NULL);<br>
+       key = ftok ( filename, &#39;M&#39;);<br>
+       g_free(ftmp);<br>
+       g_free(filename);<br>
+#else<br>
+       key = ftok ( _wapi_shm_file (WAPI_SHM_DATA), &#39;M&#39;);<br>
+#endif<br>
<br>
 again:<br>
        retries++;<br>
        oldkey = tmp_shared-&gt;sem_key;<br>
<br>
        if (oldkey == 0) {<br>
                DEBUGLOG (&quot;%s: Creating with new key (0x%x)&quot;, __func__, key);<br>
<font color="#888888"><br>
--<br>
View this message in context: <a href="http://n4.nabble.com/PATCH-mono-io-layer-shared-c-sends-non-existant-file-to-ftok-for-Linux-tp1579884p1579884.html" target="_blank">http://n4.nabble.com/PATCH-mono-io-layer-shared-c-sends-non-existant-file-to-ftok-for-Linux-tp1579884p1579884.html</a><br>

Sent from the Mono - Dev mailing list archive at Nabble.com.<br>
_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</font></blockquote></div><br></div>