diff options
Diffstat (limited to 'rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos')
6 files changed, 0 insertions, 900 deletions
diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/Makefile.in b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/Makefile.in deleted file mode 100644 index 5a411815..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/Makefile.in +++ /dev/null @@ -1,25 +0,0 @@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -TARGETS = \ - proc.lo \ - thread.lo \ - threadpriv.lo \ - threadproc_common.lo \ - apr_proc_stub - -# bring in rules.mk for standard functionality -@INCLUDE_RULES@ - -INCDIR=../../include -OSDIR=$(INCDIR)/arch/@OSDIR@ -DEFOSDIR=$(INCDIR)/arch/@DEFAULT_OSDIR@ -INCLUDES=-I$(INCDIR) -I$(INCDIR)/arch -I$(OSDIR) -I$(DEFOSDIR) - -CLEAN_TARGETS = apr_proc_stub /boot/home/config/bin/apr_proc_stub - -apr_proc_stub: - $(CC) $(srcdir)/apr_proc_stub.c \ - && cp apr_proc_stub /boot/home/config/bin - -# DO NOT REMOVE diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/apr_proc_stub.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/apr_proc_stub.c deleted file mode 100644 index 011d793e..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/apr_proc_stub.c +++ /dev/null @@ -1,76 +0,0 @@ -/* 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. - */ - -#include <kernel/OS.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> - -struct pipefd { - int in; - int out; - int err; -}; - -int main(int argc, char *argv[]) { -/* we expect the following... - * - * argv[0] = this stub - * argv[1] = directory to run in... - * argv[2] = progname to execute - * rest of arguments to be passed to program - */ - char *progname = argv[2]; - char *directory = argv[1]; - struct pipefd *pfd; - thread_id sender; - void *buffer; - char ** newargs; - int i = 0; - - newargs = (char**)malloc(sizeof(char*) * (argc - 1)); - - buffer = (void*)malloc(sizeof(struct pipefd)); - /* this will block until we get the data */ - receive_data(&sender, buffer, sizeof(struct pipefd)); - pfd = (struct pipefd*)buffer; - - if (pfd->in > STDERR_FILENO) { - if (dup2(pfd->in, STDIN_FILENO) != STDIN_FILENO) return (-1); - close (pfd->in); - } - if (pfd->out > STDERR_FILENO) { - if (dup2(pfd->out, STDOUT_FILENO) != STDOUT_FILENO) return (-1); - close (pfd->out); - } - if (pfd->err > STDERR_FILENO) { - if (dup2(pfd->err, STDERR_FILENO) != STDERR_FILENO) return (-1); - close (pfd->err); - } - - for (i=3;i<=argc;i++){ - newargs[i-3] = argv[i]; - } - - /* tell the caller we're OK to start */ - send_data(sender,1,NULL,0); - - if (directory != NULL) - chdir(directory); - execve (progname, newargs, environ); - - return (-1); -} diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/proc.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/proc.c deleted file mode 100644 index 776b15ec..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/proc.c +++ /dev/null @@ -1,371 +0,0 @@ -/* 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. - */ - -#include "apr_arch_threadproc.h" -#include "apr_strings.h" - -struct send_pipe { - int in; - int out; - int err; -}; - -APR_DECLARE(apr_status_t) apr_procattr_create(apr_procattr_t **new, apr_pool_t *pool) -{ - (*new) = (apr_procattr_t *)apr_palloc(pool, - sizeof(apr_procattr_t)); - - if ((*new) == NULL) { - return APR_ENOMEM; - } - (*new)->pool = pool; - (*new)->parent_in = NULL; - (*new)->child_in = NULL; - (*new)->parent_out = NULL; - (*new)->child_out = NULL; - (*new)->parent_err = NULL; - (*new)->child_err = NULL; - (*new)->currdir = NULL; - (*new)->cmdtype = APR_PROGRAM; - (*new)->detached = 0; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr, apr_int32_t in, - apr_int32_t out, apr_int32_t err) -{ - apr_status_t status; - if (in != 0) { - if ((status = apr_file_pipe_create(&attr->child_in, &attr->parent_in, - attr->pool)) != APR_SUCCESS) { - return status; - } - switch (in) { - case APR_FULL_BLOCK: - apr_file_pipe_timeout_set(attr->child_in, -1); - apr_file_pipe_timeout_set(attr->parent_in, -1); - break; - case APR_PARENT_BLOCK: - apr_file_pipe_timeout_set(attr->child_in, -1); - break; - case APR_CHILD_BLOCK: - apr_file_pipe_timeout_set(attr->parent_in, -1); - break; - default: - break; - } - } - if (out) { - if ((status = apr_file_pipe_create(&attr->parent_out, &attr->child_out, - attr->pool)) != APR_SUCCESS) { - return status; - } - switch (out) { - case APR_FULL_BLOCK: - apr_file_pipe_timeout_set(attr->child_out, -1); - apr_file_pipe_timeout_set(attr->parent_out, -1); - break; - case APR_PARENT_BLOCK: - apr_file_pipe_timeout_set(attr->child_out, -1); - break; - case APR_CHILD_BLOCK: - apr_file_pipe_timeout_set(attr->parent_out, -1); - break; - default: - break; - } - } - if (err) { - if ((status = apr_file_pipe_create(&attr->parent_err, &attr->child_err, - attr->pool)) != APR_SUCCESS) { - return status; - } - switch (err) { - case APR_FULL_BLOCK: - apr_file_pipe_timeout_set(attr->child_err, -1); - apr_file_pipe_timeout_set(attr->parent_err, -1); - break; - case APR_PARENT_BLOCK: - apr_file_pipe_timeout_set(attr->child_err, -1); - break; - case APR_CHILD_BLOCK: - apr_file_pipe_timeout_set(attr->parent_err, -1); - break; - default: - break; - } - } - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_dir_set(apr_procattr_t *attr, - const char *dir) -{ - char * cwd; - if (dir[0] != '/') { - cwd = (char*)malloc(sizeof(char) * PATH_MAX); - getcwd(cwd, PATH_MAX); - attr->currdir = (char *)apr_pstrcat(attr->pool, cwd, "/", dir, NULL); - free(cwd); - } else { - attr->currdir = (char *)apr_pstrdup(attr->pool, dir); - } - if (attr->currdir) { - return APR_SUCCESS; - } - return APR_ENOMEM; -} - -APR_DECLARE(apr_status_t) apr_procattr_cmdtype_set(apr_procattr_t *attr, - apr_cmdtype_e cmd) -{ - attr->cmdtype = cmd; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_detach_set(apr_procattr_t *attr, apr_int32_t detach) -{ - attr->detached = detach; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_proc_fork(apr_proc_t *proc, apr_pool_t *pool) -{ - int pid; - - if ((pid = fork()) < 0) { - return errno; - } - else if (pid == 0) { - proc->pid = pid; - proc->in = NULL; - proc->out = NULL; - proc->err = NULL; - return APR_INCHILD; - } - proc->pid = pid; - proc->in = NULL; - proc->out = NULL; - proc->err = NULL; - return APR_INPARENT; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_errfn_set(apr_procattr_t *attr, - apr_child_errfn_t *errfn) -{ - /* won't ever be called on this platform, so don't save the function pointer */ - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_error_check_set(apr_procattr_t *attr, - apr_int32_t chk) -{ - /* won't ever be used on this platform, so don't save the flag */ - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_addrspace_set(apr_procattr_t *attr, - apr_int32_t addrspace) -{ - /* won't ever be used on this platform, so don't save the flag */ - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new, const char *progname, - const char * const *args, - const char * const *env, - apr_procattr_t *attr, apr_pool_t *pool) -{ - int i=0,nargs=0; - char **newargs = NULL; - thread_id newproc, sender; - struct send_pipe *sp; - char * dir = NULL; - - sp = (struct send_pipe *)apr_palloc(pool, sizeof(struct send_pipe)); - - new->in = attr->parent_in; - new->err = attr->parent_err; - new->out = attr->parent_out; - sp->in = attr->child_in ? attr->child_in->filedes : -1; - sp->out = attr->child_out ? attr->child_out->filedes : -1; - sp->err = attr->child_err ? attr->child_err->filedes : -1; - - i = 0; - while (args && args[i]) { - i++; - } - - newargs = (char**)malloc(sizeof(char *) * (i + 4)); - newargs[0] = strdup("/boot/home/config/bin/apr_proc_stub"); - if (attr->currdir == NULL) { - /* we require the directory , so use a temp. variable */ - dir = malloc(sizeof(char) * PATH_MAX); - getcwd(dir, PATH_MAX); - newargs[1] = strdup(dir); - free(dir); - } else { - newargs[1] = strdup(attr->currdir); - } - newargs[2] = strdup(progname); - i=0;nargs = 3; - - while (args && args[i]) { - newargs[nargs] = strdup(args[i]); - i++;nargs++; - } - newargs[nargs] = NULL; - - /* ### we should be looking at attr->cmdtype in here... */ - - newproc = load_image(nargs, (const char**)newargs, (const char**)env); - - /* load_image copies the data so now we can free it... */ - while (--nargs >= 0) - free (newargs[nargs]); - free(newargs); - - if ( newproc < B_NO_ERROR) { - return errno; - } - - resume_thread(newproc); - - if (attr->child_in) { - apr_file_close(attr->child_in); - } - if (attr->child_out) { - apr_file_close(attr->child_out); - } - if (attr->child_err) { - apr_file_close(attr->child_err); - } - - send_data(newproc, 0, (void*)sp, sizeof(struct send_pipe)); - new->pid = newproc; - - /* before we go charging on we need the new process to get to a - * certain point. When it gets there it'll let us know and we - * can carry on. */ - receive_data(&sender, (void*)NULL,0); - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_proc_wait_all_procs(apr_proc_t *proc, - int *exitcode, - apr_exit_why_e *exitwhy, - apr_wait_how_e waithow, - apr_pool_t *p) -{ - proc->pid = -1; - return apr_proc_wait(proc, exitcode, exitwhy, waithow); -} - -APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc, - int *exitcode, - apr_exit_why_e *exitwhy, - apr_wait_how_e waithow) -{ - pid_t pstatus; - int waitpid_options = WUNTRACED; - int exit_int; - int ignore; - apr_exit_why_e ignorewhy; - - if (exitcode == NULL) { - exitcode = &ignore; - } - if (exitwhy == NULL) { - exitwhy = &ignorewhy; - } - - if (waithow != APR_WAIT) { - waitpid_options |= WNOHANG; - } - - if ((pstatus = waitpid(proc->pid, &exit_int, waitpid_options)) > 0) { - proc->pid = pstatus; - if (WIFEXITED(exit_int)) { - *exitwhy = APR_PROC_EXIT; - *exitcode = WEXITSTATUS(exit_int); - } - else if (WIFSIGNALED(exit_int)) { - *exitwhy = APR_PROC_SIGNAL; - *exitcode = WTERMSIG(exit_int); - } - else { - /* unexpected condition */ - return APR_EGENERAL; - } - return APR_CHILD_DONE; - } - else if (pstatus == 0) { - return APR_CHILD_NOTDONE; - } - return errno; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_in_set(apr_procattr_t *attr, apr_file_t *child_in, - apr_file_t *parent_in) -{ - if (attr->child_in == NULL && attr->parent_in == NULL) - apr_file_pipe_create(&attr->child_in, &attr->parent_in, attr->pool); - - if (child_in != NULL) - apr_file_dup(&attr->child_in, child_in, attr->pool); - - if (parent_in != NULL) - apr_file_dup(&attr->parent_in, parent_in, attr->pool); - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_out_set(apr_procattr_t *attr, apr_file_t *child_out, - apr_file_t *parent_out) -{ - if (attr->child_out == NULL && attr->parent_out == NULL) - apr_file_pipe_create(&attr->child_out, &attr->parent_out, attr->pool); - - if (child_out != NULL) - apr_file_dup(&attr->child_out, child_out, attr->pool); - - if (parent_out != NULL) - apr_file_dup(&attr->parent_out, parent_out, attr->pool); - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_err_set(apr_procattr_t *attr, apr_file_t *child_err, - apr_file_t *parent_err) -{ - if (attr->child_err == NULL && attr->parent_err == NULL) - apr_file_pipe_create(&attr->child_err, &attr->parent_err, attr->pool); - - if (child_err != NULL) - apr_file_dup(&attr->child_err, child_err, attr->pool); - - if (parent_err != NULL) - apr_file_dup(&attr->parent_err, parent_err, attr->pool); - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_limit_set(apr_procattr_t *attr, apr_int32_t what, - void *limit) -{ - return APR_ENOTIMPL; -} diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/thread.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/thread.c deleted file mode 100644 index f408f3a9..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/thread.c +++ /dev/null @@ -1,227 +0,0 @@ -/* 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. - */ - -#include "apr_arch_threadproc.h" -#include "apr_portable.h" - -APR_DECLARE(apr_status_t) apr_threadattr_create(apr_threadattr_t **new, apr_pool_t *pool) -{ - (*new) = (apr_threadattr_t *)apr_palloc(pool, - sizeof(apr_threadattr_t)); - - if ((*new) == NULL) { - return APR_ENOMEM; - } - - (*new)->pool = pool; - (*new)->attr = (int32)B_NORMAL_PRIORITY; - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadattr_detach_set(apr_threadattr_t *attr, apr_int32_t on) -{ - if (on == 1){ - attr->detached = 1; - } else { - attr->detached = 0; - } - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr) -{ - if (attr->detached == 1){ - return APR_DETACH; - } - return APR_NOTDETACH; -} - -APR_DECLARE(apr_status_t) apr_threadattr_stacksize_set(apr_threadattr_t *attr, - apr_size_t stacksize) -{ - return APR_ENOTIMPL; -} - -static void *dummy_worker(void *opaque) -{ - apr_thread_t *thd = (apr_thread_t*)opaque; - return thd->func(thd, thd->data); -} - -APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new, apr_threadattr_t *attr, - apr_thread_start_t func, void *data, - apr_pool_t *pool) -{ - int32 temp; - apr_status_t stat; - - (*new) = (apr_thread_t *)apr_palloc(pool, sizeof(apr_thread_t)); - if ((*new) == NULL) { - return APR_ENOMEM; - } - - (*new)->pool = pool; - (*new)->data = data; - (*new)->func = func; - (*new)->exitval = -1; - - /* First we create the new thread...*/ - if (attr) - temp = attr->attr; - else - temp = B_NORMAL_PRIORITY; - - stat = apr_pool_create(&(*new)->pool, pool); - if (stat != APR_SUCCESS) { - return stat; - } - - (*new)->td = spawn_thread((thread_func)dummy_worker, "apr thread", temp, (*new)); - /* Now we try to run it...*/ - if (resume_thread((*new)->td) == B_NO_ERROR) { - return APR_SUCCESS; - } - else { - return errno; - } -} - -APR_DECLARE(apr_os_thread_t) apr_os_thread_current(void) -{ - return find_thread(NULL); -} - -int apr_os_thread_equal(apr_os_thread_t tid1, apr_os_thread_t tid2) -{ - return tid1 == tid2; -} - -APR_DECLARE(apr_status_t) apr_thread_exit(apr_thread_t *thd, apr_status_t retval) -{ - apr_pool_destroy(thd->pool); - thd->exitval = retval; - exit_thread ((status_t)(retval)); - /* This will never be reached... */ - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, apr_thread_t *thd) -{ - status_t rv = 0, ret; - if ((ret = wait_for_thread(thd->td, &rv)) == B_NO_ERROR) { - *retval = rv; - return APR_SUCCESS; - } - else { - /* if we've missed the thread's death, did we set an exit value prior - * to it's demise? If we did return that. - */ - if (thd->exitval != -1) { - *retval = thd->exitval; - return APR_SUCCESS; - } else - return ret; - } -} - -APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd) -{ - if (suspend_thread(thd->td) == B_NO_ERROR){ - return APR_SUCCESS; - } - else { - return errno; - } -} - -void apr_thread_yield() -{ -} - -APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key, apr_thread_t *thread) -{ - return apr_pool_userdata_get(data, key, thread->pool); -} - -APR_DECLARE(apr_status_t) apr_thread_data_set(void *data, const char *key, - apr_status_t (*cleanup) (void *), - apr_thread_t *thread) -{ - return apr_pool_userdata_set(data, key, cleanup, thread->pool); -} - -APR_DECLARE(apr_status_t) apr_os_thread_get(apr_os_thread_t **thethd, apr_thread_t *thd) -{ - *thethd = &thd->td; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_os_thread_put(apr_thread_t **thd, apr_os_thread_t *thethd, - apr_pool_t *pool) -{ - if (pool == NULL) { - return APR_ENOPOOL; - } - if ((*thd) == NULL) { - (*thd) = (apr_thread_t *)apr_pcalloc(pool, sizeof(apr_thread_t)); - (*thd)->pool = pool; - } - (*thd)->td = *thethd; - return APR_SUCCESS; -} - -static apr_status_t thread_once_cleanup(void *vcontrol) -{ - apr_thread_once_t *control = (apr_thread_once_t *)vcontrol; - - if (control->sem) { - release_sem(control->sem); - delete_sem(control->sem); - } - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_once_init(apr_thread_once_t **control, - apr_pool_t *p) -{ - int rc; - *control = (apr_thread_once_t *)apr_pcalloc(p, sizeof(apr_thread_once_t)); - (*control)->hit = 0; /* we haven't done it yet... */ - rc = ((*control)->sem = create_sem(1, "thread_once")); - if (rc != 0) { - return rc; - } - apr_pool_cleanup_register(p, control, thread_once_cleanup, apr_pool_cleanup_null); - return APR_SUCCESS; -} - - - -APR_DECLARE(apr_status_t) apr_thread_once(apr_thread_once_t *control, - void (*func)(void)) -{ - if (!control->hit) { - if (acquire_sem(control->sem) == B_OK) { - control->hit = 1; - func(); - } - } - return APR_SUCCESS; -} - -APR_POOL_IMPLEMENT_ACCESSOR(thread) diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadpriv.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadpriv.c deleted file mode 100644 index 442235f7..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadpriv.c +++ /dev/null @@ -1,180 +0,0 @@ -/* 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. - */ - -#include "apr_arch_threadproc.h" - -static struct beos_key key_table[BEOS_MAX_DATAKEYS]; -static struct beos_private_data *beos_data[BEOS_MAX_DATAKEYS]; -static sem_id lock; - -APR_DECLARE(apr_status_t) apr_threadkey_private_create(apr_threadkey_t **key, - void (*dest)(void *), apr_pool_t *pool) -{ - (*key) = (apr_threadkey_t *)apr_palloc(pool, sizeof(apr_threadkey_t)); - if ((*key) == NULL) { - return APR_ENOMEM; - } - - (*key)->pool = pool; - - acquire_sem(lock); - for ((*key)->key=0; (*key)->key < BEOS_MAX_DATAKEYS; (*key)->key++){ - if (key_table[(*key)->key].assigned == 0){ - key_table[(*key)->key].assigned = 1; - key_table[(*key)->key].destructor = dest; - release_sem(lock); - return APR_SUCCESS; - } - - } - release_sem(lock); - return APR_ENOMEM; -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_get(void **new, apr_threadkey_t *key) -{ - thread_id tid; - int i, index=0; - tid = find_thread(NULL); - for (i=0;i<BEOS_MAX_DATAKEYS;i++){ - if (beos_data[i]->data){ - /* it's been used */ - if (beos_data[i]->td == tid){ - index = i; - } - } - } - if (index == 0){ - /* no storage for thread so we can't get anything... */ - return APR_ENOMEM; - } - - if ((key->key < BEOS_MAX_DATAKEYS) && (key_table)){ - acquire_sem(key_table[key->key].lock); - if (key_table[key->key].count){ - (*new) = (void*)beos_data[index]->data[key->key]; - } else { - (*new) = NULL; - } - release_sem(key_table[key->key].lock); - } else { - (*new) = NULL; - } - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_set(void *priv, apr_threadkey_t *key) -{ - thread_id tid; - int i,index = 0, ret = 0; - - tid = find_thread(NULL); - for (i=0; i < BEOS_MAX_DATAKEYS; i++){ - if (beos_data[i]->data){ - if (beos_data[i]->td == tid){index = i;} - } - } - if (index==0){ - /* not yet been allocated */ - for (i=0; i< BEOS_MAX_DATAKEYS; i++){ - if (! beos_data[i]->data){ - /* we'll take this one... */ - index = i; - beos_data[i]->data = (const void **)malloc(sizeof(void *) * BEOS_MAX_DATAKEYS); - memset((void *)beos_data[i]->data, 0, sizeof(void *) * BEOS_MAX_DATAKEYS); - beos_data[i]->count = (int)malloc(sizeof(int)); - beos_data[i]->td = (thread_id)malloc(sizeof(thread_id)); - beos_data[i]->td = tid; - } - } - } - if (index == 0){ - /* we're out of luck.. */ - return APR_ENOMEM; - } - if ((key->key < BEOS_MAX_DATAKEYS) && (key_table)){ - acquire_sem(key_table[key->key].lock); - if (key_table[key->key].count){ - if (beos_data[index]->data[key->key] == NULL){ - if (priv != NULL){ - beos_data[index]->count++; - key_table[key->key].count++; - } - } else { - if (priv == NULL){ - beos_data[index]->count--; - key_table[key->key].count--; - } - } - beos_data[index]->data[key->key] = priv; - ret = 1; - } else { - ret = 0; - } - release_sem(key_table[key->key].lock); - } - if (ret) - return APR_SUCCESS; - return APR_ENOMEM; -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_delete(apr_threadkey_t *key) -{ - if (key->key < BEOS_MAX_DATAKEYS){ - acquire_sem(key_table[key->key].lock); - if (key_table[key->key].count == 1){ - key_table[key->key].destructor = NULL; - key_table[key->key].count = 0; - } - release_sem(key_table[key->key].lock); - } else { - return APR_ENOMEM; - } - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadkey_data_get(void **data, const char *key, - apr_threadkey_t *threadkey) -{ - return apr_pool_userdata_get(data, key, threadkey->pool); -} - -APR_DECLARE(apr_status_t) apr_threadkey_data_set(void *data, const char *key, - apr_status_t (*cleanup) (void *), - apr_threadkey_t *threadkey) -{ - return apr_pool_userdata_set(data, key, cleanup, threadkey->pool); -} - -APR_DECLARE(apr_status_t) apr_os_threadkey_get(apr_os_threadkey_t *thekey, apr_threadkey_t *key) -{ - *thekey = key->key; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_os_threadkey_put(apr_threadkey_t **key, - apr_os_threadkey_t *thekey, apr_pool_t *pool) -{ - if (pool == NULL) { - return APR_ENOPOOL; - } - if ((*key) == NULL) { - (*key) = (apr_threadkey_t *)apr_pcalloc(pool, sizeof(apr_threadkey_t)); - (*key)->pool = pool; - } - (*key)->key = *thekey; - return APR_SUCCESS; -} diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadproc_common.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadproc_common.c deleted file mode 100644 index 95e16254..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/beos/threadproc_common.c +++ /dev/null @@ -1,21 +0,0 @@ -/* 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. - */ - -/* As the signal code is identical, use the unix version to reduce - code duplication */ -#include "../unix/signals.c" -#include "../unix/procsup.c" - |