1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "apr.h"
18#include "apr_private.h"
19#include "apr_thread_proc.h"
20#include "apr_file_io.h"
21#include "apr_arch_file_io.h"
22
23/* System headers required for thread/process library */
24#if APR_HAVE_PTHREAD_H
25#include <pthread.h>
26#endif
27#ifdef HAVE_SYS_RESOURCE_H
28#include <sys/resource.h>
29#endif
30#if APR_HAVE_SIGNAL_H
31#include <signal.h>
32#endif
33#if APR_HAVE_STRING_H
34#include <string.h>
35#endif
36#if APR_HAVE_SYS_WAIT_H
37#include <sys/wait.h>
38#endif
39#if APR_HAVE_STRING_H
40#include <string.h>
41#endif
42#ifdef HAVE_SCHED_H
43#include <sched.h>
44#endif
45/* End System Headers */
46
47
48#ifndef THREAD_PROC_H
49#define THREAD_PROC_H
50
51#define SHELL_PATH "/bin/sh"
52
53#if APR_HAS_THREADS
54
55struct apr_thread_t {
56    apr_pool_t *pool;
57    pthread_t *td;
58    void *data;
59    apr_thread_start_t func;
60    apr_status_t exitval;
61};
62
63struct apr_threadattr_t {
64    apr_pool_t *pool;
65    pthread_attr_t attr;
66};
67
68struct apr_threadkey_t {
69    apr_pool_t *pool;
70    pthread_key_t key;
71};
72
73struct apr_thread_once_t {
74    pthread_once_t once;
75};
76
77#endif
78
79struct apr_procattr_t {
80    apr_pool_t *pool;
81    apr_file_t *parent_in;
82    apr_file_t *child_in;
83    apr_file_t *parent_out;
84    apr_file_t *child_out;
85    apr_file_t *parent_err;
86    apr_file_t *child_err;
87    char *currdir;
88    apr_int32_t cmdtype;
89    apr_int32_t detached;
90#ifdef RLIMIT_CPU
91    struct rlimit *limit_cpu;
92#endif
93#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
94    struct rlimit *limit_mem;
95#endif
96#ifdef RLIMIT_NPROC
97    struct rlimit *limit_nproc;
98#endif
99#ifdef RLIMIT_NOFILE
100    struct rlimit *limit_nofile;
101#endif
102    apr_child_errfn_t *errfn;
103    apr_int32_t errchk;
104    apr_uid_t   uid;
105    apr_gid_t   gid;
106};
107
108#endif  /* ! THREAD_PROC_H */
109
110