summaryrefslogtreecommitdiffabout
path: root/src
Unidiff
Diffstat (limited to 'src') (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) {
142 scoreboard_slot *sslot = sboard.get_slot(slot); 142 scoreboard_slot *sslot = sboard.get_slot(slot);
143 try { 143 try {
144 sitespace ss(config); 144 sitespace ss(config);
145 fcgi_socket& fs = *fss; 145 fcgi_socket& fs = *fss;
146 sitecing_interface_cgi scif(&ss); 146 sitecing_interface_cgi scif(&ss);
147 string component_path; 147 string component_path;
148 string action; 148 string action;
149 config_options::action_handler_t *action_handler; 149 config_options::action_handler_t *action_handler;
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;
182 fi.metavars["SITECING_COMPONENT_PATH"]=component_path; 183 fi.metavars["SITECING_COMPONENT_PATH"]=component_path;
183 action = component_path; 184 action = component_path;
184 action_handler = config.lookup_action_handler(component_path); 185 action_handler = config.lookup_action_handler(component_path);
185 if(action_handler) { 186 if(action_handler) {
186 action = action_handler->action; 187 action = action_handler->action;
187 } 188 }
188 string pwd = konforka::dir_name(full_component_path); 189 string pwd = konforka::dir_name(full_component_path);
189 if(chdir(pwd.c_str())) 190 if(chdir(pwd.c_str()))