You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Alexei Kosut <ak...@organic.com> on 1997/07/09 00:08:42 UTC
Globals and their non-use in Apache-NT
Following up on my previous email, where I discovered that if a module
makes use of an "API global" variable, it won't work as a DLL in Windows,
I examined all the modules in the Apache distribution, and came up with
four that use global variables:
1. mod_usertrack made use of a list of month names in util.c. I just
commited (along with other Windows fixes to mod_usertrack) a patch
that gets rid of it.
2. mod_status needs restart_time, set in http_main. I've enclosed a patch
below that adds a get_restart_time() function.
3. mod_cgi checks suexec_enabled, a global variable. We should probably
wrapper this one as well. However, this is not a high priority, as
IMHO mod_cgi is a "standard" module, and will probably be compiled
into the server no matter what.
4. mod_dld uses server_argv0. I'm even less worried about that, since
mod_dld hardly works with Unix, let alone Windows. The mod_dll I
posted earlier, which works fine, doesn't need to access that
variable.
Here's the patch to make mod_status work. Note that it should be
accompanied by a bump to MODULE_MAGIC_NUMBER, as it adds a new API
function:
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_main.c,v
retrieving revision 1.174
diff -u -r1.174 http_main.c
--- http_main.c 1997/07/07 14:34:26 1.174
+++ http_main.c 1997/07/08 22:02:57
@@ -1190,6 +1190,14 @@
}
+/* This is in a global, but we can't always get to it, so we can use
+ * a function instead.
+ */
+
+time_t get_restart_time (void) {
+ return restart_time;
+}
+
static void increment_counts (int child_num, request_rec *r)
{
long int bs=0;
Index: mod_status.c
===================================================================
RCS file: /export/home/cvs/apache/src/mod_status.c,v
retrieving revision 1.51
diff -u -r1.51 mod_status.c
--- mod_status.c 1997/07/07 14:34:28 1.51
+++ mod_status.c 1997/07/08 22:02:59
@@ -193,7 +193,7 @@
};
char *loc;
time_t nowtime=time(NULL);
- time_t up_time;
+ time_t up_time, rs_time;
int i,res;
int ready=0;
int busy=0;
@@ -308,7 +308,8 @@
#endif /* STATUS */
}
- up_time=nowtime-restart_time;
+ rs_time = get_restart_time();
+ up_time = nowtime-rs_time;
hard_timeout("send status info", r);
@@ -318,7 +319,7 @@
rputs("<H1>Apache Server Status for ",r);
rvputs(r,server->server_hostname,"</H1>\n\n",NULL);
rvputs(r,"Current Time: ",asctime(localtime(&nowtime)),"<br>\n",NULL);
- rvputs(r,"Restart Time: ",asctime(localtime(&restart_time)),"<br>\n",
+ rvputs(r,"Restart Time: ",asctime(localtime(&rs_time)),"<br>\n",
NULL);
rputs("Server uptime: ",r);
show_time(r,up_time);
Index: scoreboard.h
===================================================================
RCS file: /export/home/cvs/apache/src/scoreboard.h,v
retrieving revision 1.24
diff -u -r1.24 scoreboard.h
--- scoreboard.h 1997/07/07 14:34:28 1.24
+++ scoreboard.h 1997/07/08 22:02:59
@@ -118,6 +118,8 @@
short_score get_scoreboard_info(int x);
int exists_scoreboard_image ();
+time_t get_restart_time(void);
+
/* for time_process_request() in http_main.c */
#define START_PREQUEST 1
#define STOP_PREQUEST 2
-- Alexei Kosut <ak...@organic.com>