Index: /trunk/src/VBox/Runtime/r3/posix/localipc-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/localipc-posix.cpp	(revision 58301)
+++ /trunk/src/VBox/Runtime/r3/posix/localipc-posix.cpp	(revision 58302)
@@ -248,7 +248,12 @@
                         if (RT_SUCCESS(rc))
                         {
-                            LogFlow(("RTLocalIpcServerCreate: Created %p (%s)\n", pThis, pThis->Name.sun_path));
-                            *phServer = pThis;
-                            return VINF_SUCCESS;
+                            rc = rtSocketListen(pThis->hSocket, pThis->fFlags & RTLOCALIPC_FLAGS_MULTI_SESSION ? 10 : 0);
+                            if (RT_SUCCESS(rc))
+                            {
+                                LogFlow(("RTLocalIpcServerCreate: Created %p (%s)\n", pThis, pThis->Name.sun_path));
+                                *phServer = pThis;
+                                return VINF_SUCCESS;
+                            }
+                            unlink(pThis->Name.sun_path);
                         }
                     }
@@ -401,16 +406,9 @@
             for (;;)
             {
-                if (pThis->fCancelled)
+                if (!pThis->fCancelled)
                 {
-                    rc = VERR_CANCELLED;
-                    break;
-                }
-
-                rc = RTCritSectLeave(&pThis->CritSect);
-                AssertRCBreak(rc);
-
-                rc = rtSocketListen(pThis->hSocket, pThis->fFlags & RTLOCALIPC_FLAGS_MULTI_SESSION ? 10 : 0);
-                if (RT_SUCCESS(rc))
-                {
+                    rc = RTCritSectLeave(&pThis->CritSect);
+                    AssertRCBreak(rc);
+
                     struct sockaddr_un  Addr;
                     size_t              cbAddr = sizeof(Addr);
@@ -457,9 +455,6 @@
                 else
                 {
-                    int rc2 = RTCritSectEnter(&pThis->CritSect);
-                    AssertRCBreakStmt(rc2, rc = RT_SUCCESS(rc) ? rc2 : rc);
-                    if (   rc != VERR_INTERRUPTED
-                        && rc != VERR_TRY_AGAIN)
-                        break;
+                    rc = VERR_CANCELLED;
+                    break;
                 }
             }
