patch-2.4.20 linux-2.4.20/net/khttpd/sysctl.c
Next file: linux-2.4.20/net/khttpd/sysctl.h
Previous file: linux-2.4.20/net/khttpd/security.c
Back to the patch index
Back to the overall index
- Lines: 51
- Date:
Thu Nov 28 15:53:16 2002
- Orig file:
linux-2.4.19/net/khttpd/sysctl.c
- Orig date:
Fri Feb 9 11:34:13 2001
diff -urN linux-2.4.19/net/khttpd/sysctl.c linux-2.4.20/net/khttpd/sysctl.c
@@ -64,6 +64,7 @@
int sysctl_khttpd_threads = 2;
int sysctl_khttpd_maxconnect = 1000;
+atomic_t khttpd_stopCount;
static struct ctl_table_header *khttpd_table_header;
@@ -72,6 +73,8 @@
void *newval, size_t newlen, void **context);
static int proc_dosecurestring(ctl_table *table, int write, struct file *filp,
void *buffer, size_t *lenp);
+static int khttpd_stop_wrap_proc_dointvec(ctl_table *table, int write, struct file *filp,
+ void *buffer, size_t *lenp);
static ctl_table khttpd_table[] = {
@@ -93,7 +96,7 @@
sizeof(int),
0644,
NULL,
- proc_dointvec,
+ khttpd_stop_wrap_proc_dointvec,
&sysctl_intvec,
NULL,
NULL,
@@ -307,6 +310,24 @@
return 0;
}
+/* A wrapper around proc_dointvec that computes
+ * khttpd_stopCount = # of times sysctl_khttpd_stop has gone true
+ * Sensing sysctl_khttpd_stop in other threads is racy;
+ * sensing khttpd_stopCount in other threads is not.
+ */
+static int khttpd_stop_wrap_proc_dointvec(ctl_table *table, int write, struct file *filp,
+ void *buffer, size_t *lenp)
+{
+ int rv;
+ int oldstop = sysctl_khttpd_stop;
+ rv = proc_dointvec(table, write, filp, buffer, lenp);
+ if (sysctl_khttpd_stop && !oldstop)
+ atomic_inc(&khttpd_stopCount);
+
+ return rv;
+}
+
+
static int sysctl_SecureString (/*@unused@*/ctl_table *table,
/*@unused@*/int *name,
/*@unused@*/int nlen,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)