summaryrefslogtreecommitdiffabout
path: root/src/sitecing-fastcgi.cc
Side-by-side diff
Diffstat (limited to 'src/sitecing-fastcgi.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/sitecing-fastcgi.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/sitecing-fastcgi.cc b/src/sitecing-fastcgi.cc
index 57aba60..4768e8f 100644
--- a/src/sitecing-fastcgi.cc
+++ b/src/sitecing-fastcgi.cc
@@ -142,48 +142,49 @@ void sitecing_fastcgi_pm::process(int slot) {
scoreboard_slot *sslot = sboard.get_slot(slot);
try {
sitespace ss(config);
fcgi_socket& fs = *fss;
sitecing_interface_cgi scif(&ss);
string component_path;
string action;
config_options::action_handler_t *action_handler;
int rpc = 0;
if(config.flags&configuration::flag_requests_per_child)
rpc = config.requests_per_child;
for(int req=0;(rpc<=0) || (req<rpc);++req) {
semaphore_lock sl;
if(multi) {
sslot->state = scoreboard_slot::state_idle;
sl.sem = &sem;
sl.lock();
}
sslot->state = scoreboard_slot::state_accept;
fcgi_interface fi(fs);
sslot->state = scoreboard_slot::state_processing;
if(multi)
sl.unlock();
cgi_gateway gw(fi);
+ ++scif.serial;
scif.prepare(&gw);
try {
component_path = konforka::normalize_path(gw.path_info(),konforka::strip_leading_slash|konforka::strip_trailing_slash);
string full_component_path;
string sitecing_path_info;
while(true) {
full_component_path = config.root_source+'/'+component_path;
if(!access(full_component_path.c_str(),F_OK))
break;
string::size_type sl = component_path.rfind('/');
if(sl==string::npos)
throw konforka::exception(CODEPOINT,"can't find the target component");
sitecing_path_info.insert(0,component_path,sl,string::npos);
component_path.erase(sl);
}
fi.metavars["SITECING_PATH_INFO"]=sitecing_path_info;
fi.metavars["SITECING_COMPONENT_PATH"]=component_path;
action = component_path;
action_handler = config.lookup_action_handler(component_path);
if(action_handler) {
action = action_handler->action;
}
string pwd = konforka::dir_name(full_component_path);
if(chdir(pwd.c_str()))