Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Move node_http_parser.cc global vars into node_vars.h
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Dec 7, 2011
1 parent f8c335d commit 06d86eb
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 72 deletions.
98 changes: 47 additions & 51 deletions src/node_http_parser.cc
Expand Up @@ -47,61 +47,57 @@
// allocations.


#include <node_vars.h>
// We do the following to minimize the detal between v0.6 branch. We want to
// use the variables as they were being used before.
#define on_headers_sym NODE_VAR(on_headers_sym)
#define on_headers_complete_sym NODE_VAR(on_headers_complete_sym)
#define on_body_sym NODE_VAR(on_body_sym)
#define on_message_complete_sym NODE_VAR(on_message_complete_sym)
#define delete_sym NODE_VAR(delete_sym)
#define get_sym NODE_VAR(get_sym)
#define head_sym NODE_VAR(head_sym)
#define post_sym NODE_VAR(post_sym)
#define put_sym NODE_VAR(put_sym)
#define connect_sym NODE_VAR(connect_sym)
#define options_sym NODE_VAR(options_sym)
#define trace_sym NODE_VAR(trace_sym)
#define patch_sym NODE_VAR(patch_sym)
#define copy_sym NODE_VAR(copy_sym)
#define lock_sym NODE_VAR(lock_sym)
#define mkcol_sym NODE_VAR(mkcol_sym)
#define move_sym NODE_VAR(move_sym)
#define propfind_sym NODE_VAR(propfind_sym)
#define proppatch_sym NODE_VAR(proppatch_sym)
#define unlock_sym NODE_VAR(unlock_sym)
#define report_sym NODE_VAR(report_sym)
#define mkactivity_sym NODE_VAR(mkactivity_sym)
#define checkout_sym NODE_VAR(checkout_sym)
#define merge_sym NODE_VAR(merge_sym)
#define msearch_sym NODE_VAR(msearch_sym)
#define notify_sym NODE_VAR(notify_sym)
#define subscribe_sym NODE_VAR(subscribe_sym)
#define unsubscribe_sym NODE_VAR(unsubscribe_sym)
#define unknown_method_sym NODE_VAR(unknown_method_sym)
#define method_sym NODE_VAR(method_sym)
#define status_code_sym NODE_VAR(status_code_sym)
#define http_version_sym NODE_VAR(http_version_sym)
#define version_major_sym NODE_VAR(version_major_sym)
#define version_minor_sym NODE_VAR(version_minor_sym)
#define should_keep_alive_sym NODE_VAR(should_keep_alive_sym)
#define upgrade_sym NODE_VAR(upgrade_sym)
#define headers_sym NODE_VAR(headers_sym)
#define url_sym NODE_VAR(url_sym)
#define settings NODE_VAR(settings)
#define current_buffer NODE_VAR(current_buffer)
#define current_buffer_data NODE_VAR(current_buffer_data)
#define current_buffer_len NODE_VAR(current_buffer_len)


namespace node {

using namespace v8;

static Persistent<String> on_headers_sym;
static Persistent<String> on_headers_complete_sym;
static Persistent<String> on_body_sym;
static Persistent<String> on_message_complete_sym;

static Persistent<String> delete_sym;
static Persistent<String> get_sym;
static Persistent<String> head_sym;
static Persistent<String> post_sym;
static Persistent<String> put_sym;
static Persistent<String> connect_sym;
static Persistent<String> options_sym;
static Persistent<String> trace_sym;
static Persistent<String> patch_sym;
static Persistent<String> copy_sym;
static Persistent<String> lock_sym;
static Persistent<String> mkcol_sym;
static Persistent<String> move_sym;
static Persistent<String> propfind_sym;
static Persistent<String> proppatch_sym;
static Persistent<String> unlock_sym;
static Persistent<String> report_sym;
static Persistent<String> mkactivity_sym;
static Persistent<String> checkout_sym;
static Persistent<String> merge_sym;
static Persistent<String> msearch_sym;
static Persistent<String> notify_sym;
static Persistent<String> subscribe_sym;
static Persistent<String> unsubscribe_sym;
static Persistent<String> unknown_method_sym;

static Persistent<String> method_sym;
static Persistent<String> status_code_sym;
static Persistent<String> http_version_sym;
static Persistent<String> version_major_sym;
static Persistent<String> version_minor_sym;
static Persistent<String> should_keep_alive_sym;
static Persistent<String> upgrade_sym;
static Persistent<String> headers_sym;
static Persistent<String> url_sym;

static struct http_parser_settings settings;


// This is a hack to get the current_buffer to the callbacks with the least
// amount of overhead. Nothing else will run while http_parser_execute()
// runs, therefore this pointer can be set and used for the execution.
static Local<Value>* current_buffer;
static char* current_buffer_data;
static size_t current_buffer_len;


// gcc 3.x knows the always_inline attribute but fails at build time with a
// "sorry, unimplemented: inlining failed" error when compiling at -O0
Expand Down
84 changes: 63 additions & 21 deletions src/node_vars.h
Expand Up @@ -7,6 +7,7 @@

#include <v8.h>
#include <uv.h>
#include <http_parser.h>

#ifndef PATH_MAX
# define PATH_MAX 4096
Expand All @@ -30,42 +31,23 @@ struct globals {
v8::Persistent<v8::String> listeners_symbol;
v8::Persistent<v8::String> uncaught_exception_symbol;
v8::Persistent<v8::String> emit_symbol;

// stream_wrap.cc
size_t slab_used;
uv_stream_t* handle_that_last_alloced;
v8::Persistent<v8::String> slab_sym;
v8::Persistent<v8::String> buffer_sym;
v8::Persistent<v8::String> write_queue_size_sym;
bool stream_wrap_initialized;

// tcp_wrap.cc
v8::Persistent<v8::Function> tcpConstructor;
v8::Persistent<v8::String> family_symbol;
v8::Persistent<v8::String> address_symbol;
v8::Persistent<v8::String> port_symbol;

bool print_eval;
char *eval_string;
int option_end_index;
bool use_debug_agent;
bool debug_wait_connect;
int debug_port;
int max_stack_size;

uv_check_t check_tick_watcher;
uv_prepare_t prepare_tick_watcher;
uv_idle_t tick_spinner;
bool need_tick_cb;
v8::Persistent<v8::String> tick_callback_sym;

bool use_npn;
bool use_sni;

// Buffer for getpwnam_r(), getgrpam_r() and other misc callers; keep this
// scoped at file-level rather than method-level to avoid excess stack usage.
char getbuf[PATH_MAX + 1];

// We need to notify V8 when we're idle so that it can run the garbage
// collector. The interface to this is V8::IdleNotification(). It returns
// true if the heap hasn't be fully compacted, and needs to be run again.
Expand All @@ -77,13 +59,73 @@ struct globals {
uv_idle_t gc_idle;
uv_timer_t gc_timer;
bool need_gc;

# define FAST_TICK 700.
# define GC_WAIT_TIME 5000.
# define RPM_SAMPLES 100

int64_t tick_times[RPM_SAMPLES];
int tick_time_head;

// stream_wrap.cc
size_t slab_used;
uv_stream_t* handle_that_last_alloced;
v8::Persistent<v8::String> slab_sym;
v8::Persistent<v8::String> buffer_sym;
v8::Persistent<v8::String> write_queue_size_sym;
bool stream_wrap_initialized;

// tcp_wrap.cc
v8::Persistent<v8::Function> tcpConstructor;
v8::Persistent<v8::String> family_symbol;
v8::Persistent<v8::String> address_symbol;
v8::Persistent<v8::String> port_symbol;

// node_http_parser.cc
v8::Persistent<v8::String> on_headers_sym;
v8::Persistent<v8::String> on_headers_complete_sym;
v8::Persistent<v8::String> on_body_sym;
v8::Persistent<v8::String> on_message_complete_sym;
v8::Persistent<v8::String> delete_sym;
v8::Persistent<v8::String> get_sym;
v8::Persistent<v8::String> head_sym;
v8::Persistent<v8::String> post_sym;
v8::Persistent<v8::String> put_sym;
v8::Persistent<v8::String> connect_sym;
v8::Persistent<v8::String> options_sym;
v8::Persistent<v8::String> trace_sym;
v8::Persistent<v8::String> patch_sym;
v8::Persistent<v8::String> copy_sym;
v8::Persistent<v8::String> lock_sym;
v8::Persistent<v8::String> mkcol_sym;
v8::Persistent<v8::String> move_sym;
v8::Persistent<v8::String> propfind_sym;
v8::Persistent<v8::String> proppatch_sym;
v8::Persistent<v8::String> unlock_sym;
v8::Persistent<v8::String> report_sym;
v8::Persistent<v8::String> mkactivity_sym;
v8::Persistent<v8::String> checkout_sym;
v8::Persistent<v8::String> merge_sym;
v8::Persistent<v8::String> msearch_sym;
v8::Persistent<v8::String> notify_sym;
v8::Persistent<v8::String> subscribe_sym;
v8::Persistent<v8::String> unsubscribe_sym;
v8::Persistent<v8::String> unknown_method_sym;
v8::Persistent<v8::String> method_sym;
v8::Persistent<v8::String> status_code_sym;
v8::Persistent<v8::String> http_version_sym;
v8::Persistent<v8::String> version_major_sym;
v8::Persistent<v8::String> version_minor_sym;
v8::Persistent<v8::String> should_keep_alive_sym;
v8::Persistent<v8::String> upgrade_sym;
v8::Persistent<v8::String> headers_sym;
v8::Persistent<v8::String> url_sym;
struct http_parser_settings settings;
// This is a hack to get the current_buffer to the callbacks with the least
// amount of overhead. Nothing else will run while http_parser_execute()
// runs, therefore this pointer can be set and used for the execution.
v8::Local<v8::Value>* current_buffer;
char* current_buffer_data;
size_t current_buffer_len;

};

struct globals* globals_get();
Expand Down

0 comments on commit 06d86eb

Please sign in to comment.