Author: mturk Date: Thu Nov 26 13:21:15 2009 New Revision: 884552 URL: http://svn.apache.org/viewvc?rev=884552&view=rev Log: Fix posix pipe cleanup during creation error
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pipe.c Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pipe.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pipe.c?rev=884552&r1=884551&r2=884552&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/unix/pipe.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pipe.c Thu Nov 26 13:21:15 2009 @@ -200,13 +200,11 @@ finally: if (rc) { - if (fp && fp->descriptor) - (*_E)->DeleteWeakGlobalRef(_E, fp->descriptor); - if (fd >= 0) + if (fp) + file_cleanup(fp, ACR_DT_FILE, ACR_IOH_CLEAR); + else close(fd); - x_free(fp); } - return rc; } @@ -214,32 +212,25 @@ jint flags) { int rc = 0; - jobject fd[2]; - int pd[2] = { -1, -1 }; + jobject fd[2] = {NULL, NULL }; + int pd[2] = { -1, -1 }; if (pipe(pd) == -1) { ACR_THROW_IO_ERRNO(); return NULL; } - rc = do_popen(_E, pd[0], flags & ACR_PIPE_RD, &fd[0]); + rc = do_popen(_E, pd[0], flags & ACR_PIPE_RD, &fd[0]); if (rc) { - goto cleanup; + goto finally; } rc = do_popen(_E, pd[1], flags & ACR_PIPE_WR, &fd[1]); if (rc) { - /* ### fd[0] will be closed by GC ? - */ - pd[0] = -1; - goto cleanup; + ACR_DescriptorCleanup(_E, fd[0]); + goto finally; } return ACR_NewPipeObject(_E, flags, fd[0], fd[1], NULL); -cleanup: - if (pd[0] != -1) - close(pd[0]); - if (pd[1] != -1) - close(pd[1]); - +finally: ACR_THROW_IO_IF_ERR(rc); return NULL; }