Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

142 lines (108 sloc) 4.836 kb
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* Cherokee
*
* Authors:
* Alvaro Lopez Ortega <alvaro@alobbs.com>
*
* Copyright (C) 2001-2011 Alvaro Lopez Ortega
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
#ifndef CHEROKEE_THREAD_H
#define CHEROKEE_THREAD_H
#include "common-internal.h"
#ifdef HAVE_PTHREAD_H
# include <pthread.h>
#endif
#include "list.h"
#include "socket.h"
#include "request.h"
#include "request-protected.h"
#include "fdpoll.h"
#include "avl.h"
#include "limiter.h"
typedef enum {
thread_sync,
thread_async
} cherokee_thread_type_t;
typedef struct {
cherokee_list_t base;
#ifdef HAVE_PTHREAD
pthread_t thread;
pthread_mutex_t starting_lock;
pthread_mutex_t ownership;
#endif
cherokee_fdpoll_t *fdpoll;
cherokee_thread_type_t thread_type;
time_t bogo_now;
struct tm bogo_now_tmgmt;
struct tm bogo_now_tmloc;
cherokee_buffer_t bogo_now_strgmt;
cherokee_buffer_t tmp_buf1;
cherokee_buffer_t tmp_buf2;
void *server;
cherokee_boolean_t exit;
cherokee_boolean_t ended;
cuint_t conns_num; /* open connections */
cuint_t conns_max; /* max opened conns */
cuint_t conns_keepalive_max; /* max opened conns */
cherokee_list_t active_list;
cherokee_list_t polling_list;
struct {
cherokee_list_t conns;
int conns_num;
cherokee_list_t reqs;
int reqs_num;
} reuse;
// cherokee_list_t reuse_list;
// int reuse_list_num; /* reusable connections objs */
cherokee_limiter_t limiter; /* Traffic shaping */
cherokee_boolean_t is_full;
cherokee_avl_t *fastcgi_servers;
cherokee_func_free_t fastcgi_free_func;
} cherokee_thread_t;
#define THREAD(x) ((cherokee_thread_t *)(x))
#define THREAD_SRV(t) (SRV(THREAD(t)->server))
#define THREAD_IS_REAL(t) (THREAD(t)->real_thread)
#define THREAD_TMP_BUF1(t) (&THREAD(t)->tmp_buf1)
#define THREAD_TMP_BUF2(t) (&THREAD(t)->tmp_buf2)
#ifdef HAVE_PTHREAD
ret_t cherokee_thread_step_MULTI_THREAD (cherokee_thread_t *thd, cherokee_boolean_t dont_block);
#else
# define cherokee_thread_step_MULTI_THREAD(t,b) cherokee_thread_step_SINGLE_THREAD(t)
#endif
ret_t cherokee_thread_step_SINGLE_THREAD (cherokee_thread_t *thd);
ret_t cherokee_thread_new (cherokee_thread_t **thd,
void *server,
cherokee_thread_type_t type,
cherokee_poll_type_t fdtype,
cint_t system_fd_num,
cint_t fds_max,
cint_t conns_max,
cint_t keepalive_max);
ret_t cherokee_thread_free (cherokee_thread_t *thd);
ret_t cherokee_thread_unlock (cherokee_thread_t *thd);
ret_t cherokee_thread_wait_end (cherokee_thread_t *thd);
int cherokee_thread_connection_num (cherokee_thread_t *thd);
ret_t cherokee_thread_deactive_to_polling (cherokee_thread_t *thd, cherokee_request_t *conn);
ret_t cherokee_thread_retire_active_connection (cherokee_thread_t *thd, cherokee_request_t *conn);
ret_t cherokee_thread_inject_active_connection (cherokee_thread_t *thd, cherokee_request_t *conn);
ret_t cherokee_thread_close_all_connections (cherokee_thread_t *thd);
ret_t cherokee_thread_close_polling_connections (cherokee_thread_t *thd, int fd, cuint_t *num);
ret_t cherokee_thread_get_new_request (cherokee_thread_t *thd, cherokee_request_t **req);
ret_t cherokee_thread_recycle_request (cherokee_thread_t *thd, cherokee_request_t *req);
ret_t cherokee_thread_get_new_connection (cherokee_thread_t *thd, cherokee_connection_t **conn);
ret_t cherokee_thread_recycle_connection (cherokee_thread_t *thd, cherokee_connection_t *conn);
#endif /* CHEROKEE_THREAD_H */
Jump to Line
Something went wrong with that request. Please try again.