apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wr...@apache.org
Subject svn commit: r584943 - /apr/apr/trunk/include/arch/os2/apr_arch_inherit.h
Date Mon, 15 Oct 2007 22:07:33 GMT
Author: wrowe
Date: Mon Oct 15 15:07:32 2007
New Revision: 584943

URL: http://svn.apache.org/viewvc?rev=584943&view=rev
Log:
OS2 fails to fork-for-exec, and therefore doesn't use the
apr_pool_cleanup_for_exec hook, which means it's leaking
like a sieve.  This alternate implementation of the function
is sub-optimal because parallel threads can be setting up
handles to be inherited, and this just isn't healthy.

The best fix is to create all handles uninherited, and only
toggle the std streams to be inherited in apr_proc_create().

I'm happy to work with any OS2 folk to make that happen.

Added:
    apr/apr/trunk/include/arch/os2/apr_arch_inherit.h   (with props)

Added: apr/apr/trunk/include/arch/os2/apr_arch_inherit.h
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/arch/os2/apr_arch_inherit.h?rev=584943&view=auto
==============================================================================
--- apr/apr/trunk/include/arch/os2/apr_arch_inherit.h (added)
+++ apr/apr/trunk/include/arch/os2/apr_arch_inherit.h Mon Oct 15 15:07:32 2007
@@ -0,0 +1,50 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef INHERIT_H
+#define INHERIT_H
+
+#include "apr_inherit.h"
+
+#define APR_INHERIT (1 << 24)    /* Must not conflict with other bits */
+
+#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup)        \
+APR_DECLARE(apr_status_t) apr_##name##_inherit_set(apr_##name##_t *the##name) \
+{                                                                   \
+    int rv;                                                         \
+    ULONG state;                                                    \
+    if (((rv = DosQueryFHState(attr->parent_err->filedes, &state))  \
+            != 0) ||                                                \
+        ((rv = DosSetFHState(attr->parent_err->filedes,             \
+                            state & ~OPEN_FLAGS_NOINHERIT)) != 0))  \
+        return APR_FROM_OS_ERROR(rv);                               \
+    return APR_SUCCESS;                                             \
+}
+
+#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup)      \
+APR_DECLARE(apr_status_t) apr_##name##_inherit_unset(apr_##name##_t *the##name)\
+{                                                                   \
+    int rv;                                                         \
+    ULONG state;                                                    \
+    if (((rv = DosQueryFHState(attr->parent_err->filedes, &state))  \
+            != 0) ||                                                \
+        ((rv = DosSetFHState(attr->parent_err->filedes,             \
+                            state | OPEN_FLAGS_NOINHERIT)) != 0))   \
+        return APR_FROM_OS_ERROR(rv);                               \
+    return APR_SUCCESS;                                             \
+}
+
+#endif	/* ! INHERIT_H */

Propchange: apr/apr/trunk/include/arch/os2/apr_arch_inherit.h
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message