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 55 struct 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 63 struct apr_threadattr_t { 64 apr_pool_t *pool; 65 pthread_attr_t attr; 66 }; 67 68 struct apr_threadkey_t { 69 apr_pool_t *pool; 70 pthread_key_t key; 71 }; 72 73 struct apr_thread_once_t { 74 pthread_once_t once; 75 }; 76 77 #endif 78 79 struct 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