1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2251875Speter * contributor license agreements.  See the NOTICE file distributed with
3251875Speter * this work for additional information regarding copyright ownership.
4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5251875Speter * (the "License"); you may not use this file except in compliance with
6251875Speter * the License.  You may obtain a copy of the License at
7251875Speter *
8251875Speter *     http://www.apache.org/licenses/LICENSE-2.0
9251875Speter *
10251875Speter * Unless required by applicable law or agreed to in writing, software
11251875Speter * distributed under the License is distributed on an "AS IS" BASIS,
12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13251875Speter * See the License for the specific language governing permissions and
14251875Speter * limitations under the License.
15251875Speter */
16251875Speter
17251875Speter#include "apr.h"
18251875Speter#include "apr_private.h"
19251875Speter#include "apr_thread_proc.h"
20251875Speter#include "apr_file_io.h"
21251875Speter#include "apr_arch_file_io.h"
22251875Speter
23251875Speter/* System headers required for thread/process library */
24251875Speter#if APR_HAVE_PTHREAD_H
25251875Speter#include <pthread.h>
26251875Speter#endif
27251875Speter#ifdef HAVE_SYS_RESOURCE_H
28251875Speter#include <sys/resource.h>
29251875Speter#endif
30251875Speter#if APR_HAVE_SIGNAL_H
31251875Speter#include <signal.h>
32251875Speter#endif
33251875Speter#if APR_HAVE_STRING_H
34251875Speter#include <string.h>
35251875Speter#endif
36251875Speter#if APR_HAVE_SYS_WAIT_H
37251875Speter#include <sys/wait.h>
38251875Speter#endif
39251875Speter#if APR_HAVE_STRING_H
40251875Speter#include <string.h>
41251875Speter#endif
42251875Speter#if HAVE_SCHED_H
43251875Speter#include <sched.h>
44251875Speter#endif
45251875Speter/* End System Headers */
46251875Speter
47251875Speter
48251875Speter#ifndef THREAD_PROC_H
49251875Speter#define THREAD_PROC_H
50251875Speter
51251875Speter#define SHELL_PATH "/bin/sh"
52251875Speter
53251875Speter#if APR_HAS_THREADS
54251875Speter
55251875Speterstruct apr_thread_t {
56251875Speter    apr_pool_t *pool;
57251875Speter    pthread_t *td;
58251875Speter    void *data;
59251875Speter    apr_thread_start_t func;
60251875Speter    apr_status_t exitval;
61251875Speter};
62251875Speter
63251875Speterstruct apr_threadattr_t {
64251875Speter    apr_pool_t *pool;
65251875Speter    pthread_attr_t attr;
66251875Speter};
67251875Speter
68251875Speterstruct apr_threadkey_t {
69251875Speter    apr_pool_t *pool;
70251875Speter    pthread_key_t key;
71251875Speter};
72251875Speter
73251875Speterstruct apr_thread_once_t {
74251875Speter    pthread_once_t once;
75251875Speter};
76251875Speter
77251875Speter#endif
78251875Speter
79251875Speterstruct apr_procattr_t {
80251875Speter    apr_pool_t *pool;
81251875Speter    apr_file_t *parent_in;
82251875Speter    apr_file_t *child_in;
83251875Speter    apr_file_t *parent_out;
84251875Speter    apr_file_t *child_out;
85251875Speter    apr_file_t *parent_err;
86251875Speter    apr_file_t *child_err;
87251875Speter    char *currdir;
88251875Speter    apr_int32_t cmdtype;
89251875Speter    apr_int32_t detached;
90251875Speter#ifdef RLIMIT_CPU
91251875Speter    struct rlimit *limit_cpu;
92251875Speter#endif
93251875Speter#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
94251875Speter    struct rlimit *limit_mem;
95251875Speter#endif
96251875Speter#ifdef RLIMIT_NPROC
97251875Speter    struct rlimit *limit_nproc;
98251875Speter#endif
99251875Speter#ifdef RLIMIT_NOFILE
100251875Speter    struct rlimit *limit_nofile;
101251875Speter#endif
102251875Speter    apr_child_errfn_t *errfn;
103251875Speter    apr_int32_t errchk;
104251875Speter    apr_uid_t   uid;
105251875Speter    apr_gid_t   gid;
106251875Speter};
107251875Speter
108251875Speter#endif  /* ! THREAD_PROC_H */
109251875Speter
110