summaryrefslogtreecommitdiffabout
path: root/src/sitecing-fastcgi.cc
Unidiff
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
@@ -150,32 +150,33 @@ void sitecing_fastcgi_pm::process(int slot) {
150 int rpc = 0; 150 int rpc = 0;
151 if(config.flags&configuration::flag_requests_per_child) 151 if(config.flags&configuration::flag_requests_per_child)
152 rpc = config.requests_per_child; 152 rpc = config.requests_per_child;
153 for(int req=0;(rpc<=0) || (req<rpc);++req) { 153 for(int req=0;(rpc<=0) || (req<rpc);++req) {
154 semaphore_lock sl; 154 semaphore_lock sl;
155 if(multi) { 155 if(multi) {
156 sslot->state = scoreboard_slot::state_idle; 156 sslot->state = scoreboard_slot::state_idle;
157 sl.sem = &sem; 157 sl.sem = &sem;
158 sl.lock(); 158 sl.lock();
159 } 159 }
160 sslot->state = scoreboard_slot::state_accept; 160 sslot->state = scoreboard_slot::state_accept;
161 fcgi_interface fi(fs); 161 fcgi_interface fi(fs);
162 sslot->state = scoreboard_slot::state_processing; 162 sslot->state = scoreboard_slot::state_processing;
163 if(multi) 163 if(multi)
164 sl.unlock(); 164 sl.unlock();
165 cgi_gateway gw(fi); 165 cgi_gateway gw(fi);
166 ++scif.serial;
166 scif.prepare(&gw); 167 scif.prepare(&gw);
167 try { 168 try {
168 component_path = konforka::normalize_path(gw.path_info(),konforka::strip_leading_slash|konforka::strip_trailing_slash); 169 component_path = konforka::normalize_path(gw.path_info(),konforka::strip_leading_slash|konforka::strip_trailing_slash);
169 string full_component_path; 170 string full_component_path;
170 string sitecing_path_info; 171 string sitecing_path_info;
171 while(true) { 172 while(true) {
172 full_component_path = config.root_source+'/'+component_path; 173 full_component_path = config.root_source+'/'+component_path;
173 if(!access(full_component_path.c_str(),F_OK)) 174 if(!access(full_component_path.c_str(),F_OK))
174 break; 175 break;
175 string::size_type sl = component_path.rfind('/'); 176 string::size_type sl = component_path.rfind('/');
176 if(sl==string::npos) 177 if(sl==string::npos)
177 throw konforka::exception(CODEPOINT,"can't find the target component"); 178 throw konforka::exception(CODEPOINT,"can't find the target component");
178 sitecing_path_info.insert(0,component_path,sl,string::npos); 179 sitecing_path_info.insert(0,component_path,sl,string::npos);
179 component_path.erase(sl); 180 component_path.erase(sl);
180 } 181 }
181 fi.metavars["SITECING_PATH_INFO"]=sitecing_path_info; 182 fi.metavars["SITECING_PATH_INFO"]=sitecing_path_info;