You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/10/16 18:18:33 UTC
svn commit: r825981 - in /commons/sandbox/runtime/trunk/src/main/native/os:
unix/fsysio.c win32/fsysio.c
Author: mturk
Date: Fri Oct 16 16:18:33 2009
New Revision: 825981
URL: http://svn.apache.org/viewvc?rev=825981&view=rev
Log:
On noclose cleanup don't close the OS file object
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c?rev=825981&r1=825980&r2=825981&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c Fri Oct 16 16:18:33 2009
@@ -55,7 +55,7 @@
return rc;
}
-static int file_cclose(void *file, int type, unsigned int flags)
+static int file_noclose(void *file, int type, unsigned int flags)
{
int rc = ACR_SUCCESS;
acr_file_t *fp = (acr_file_t *)file;
@@ -71,13 +71,8 @@
x_free(fp);
else {
/* This is from Descriptor.close() call
+ * Only invalidate the file without closing it.
*/
- if (fp->fd >= 0) {
- if (close(fp->fd))
- rc = ACR_GET_OS_ERROR();
- }
- else
- rc = ACR_EBADF;
fp->fd = -1;
}
return rc;
@@ -246,7 +241,7 @@
fp->timeout = -1;
}
if (flags & ACR_FOPEN_NOCLEANUP)
- fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_cclose);
+ fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_noclose);
else
fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_cleanup);
if (fo < 0) {
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c?rev=825981&r1=825980&r2=825981&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c Fri Oct 16 16:18:33 2009
@@ -41,13 +41,14 @@
rc = ACR_GET_OS_ERROR();
else
rc = ACR_SUCCESS;
+ fp->fd = INVALID_HANDLE_VALUE;
+ }
+ if (fp->name) {
+ x_free(fp->name);
+ fp->name = NULL;
}
- x_free(fp->name);
- fp->name = NULL;
if (flags & ACR_IOH_CLEAR)
x_free(fp);
- else
- fp->fd = INVALID_HANDLE_VALUE;
return rc;
}
@@ -55,7 +56,7 @@
static LONG volatile _std_out = 1;
static LONG volatile _std_err = 1;
-static int file_cclose(void *file, int type, unsigned int flags)
+static int file_noclose(void *file, int type, unsigned int flags)
{
int rc = ACR_SUCCESS;
acr_file_t *fp = (acr_file_t *)file;
@@ -67,36 +68,13 @@
x_free(fp->name);
fp->name = NULL;
}
- if (flags & ACR_IOH_CLEAR)
+ if (flags & ACR_IOH_CLEAR) {
x_free(fp);
+ }
else {
/* This is from Descriptor.close() call
+ * Only invalidate the file without closing it.
*/
- if (IS_VALID_HANDLE(fp->fd)) {
- if (fp->flags & ACR_STDFILE_FLAGS) {
- switch (fp->flags & ACR_STDFILE_FLAGS) {
- case ACR_STDIN_FLAG:
- if (InterlockedExchange(&_std_in, 0))
- _close(0);
- SetStdHandle(STD_INPUT_HANDLE, INVALID_HANDLE_VALUE);
- break;
- case ACR_STDOUT_FLAG:
- if (InterlockedExchange(&_std_out, 0))
- _close(1);
- SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
- break;
- case ACR_STDERR_FLAG:
- if (InterlockedExchange(&_std_err, 0))
- _close(2);
- SetStdHandle(STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
- break;
- }
- }
- else if (!CloseHandle(fp->fd))
- rc = ACR_GET_OS_ERROR();
- }
- else
- rc = ACR_EBADF;
fp->fd = INVALID_HANDLE_VALUE;
}
return rc;
@@ -253,7 +231,7 @@
fp->timeout = INFINITE;
}
if (flags & ACR_FOPEN_NOCLEANUP)
- fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_cclose);
+ fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_noclose);
else
fo = acr_ioh_open(fp, ACR_DT_FILE, 0, file_cleanup);
if (fo < 0) {