summaryrefslogtreecommitdiffstats
path: root/src/tests/threads/prof1.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-12-12 22:55:55 +0000
committerKen Raeburn <raeburn@mit.edu>2004-12-12 22:55:55 +0000
commit398f4520c2a9357d6ab5aff8be6dec89846674bf (patch)
tree4e754c4e494a952223d10544a328510db7eae653 /src/tests/threads/prof1.c
parent61b07513ee6f0e85b33a705cec403651b2fe28e7 (diff)
downloadkrb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.tar.gz
krb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.tar.xz
krb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.zip
new test prog "prof1" for profile reloading
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16931 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/tests/threads/prof1.c')
-rw-r--r--src/tests/threads/prof1.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/tests/threads/prof1.c b/src/tests/threads/prof1.c
new file mode 100644
index 0000000000..766bfa3d04
--- /dev/null
+++ b/src/tests/threads/prof1.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <time.h>
+#include <sys/time.h>
+#include <utime.h>
+#include <com_err.h>
+#include <profile.h>
+
+int nthreads = 10;
+unsigned int delay = 3600;
+
+volatile int done = 0; /* XXX hack */
+
+const char *path = "/tmp/foo1.conf:/tmp/foo.conf";
+const char *filename = "/tmp/foo.conf";
+
+const char *prog;
+
+static void *worker(void *arg)
+{
+ profile_t p;
+ long err;
+ int i;
+ const char *const names[] = {
+ "one", "two", "three", 0
+ };
+ char **values;
+ const char *mypath = (random() & 1) ? path : filename;
+
+ while (!done) {
+ err = profile_init_path(mypath, &p);
+ if (err) {
+ com_err(prog, err, "calling profile_init(\"%s\")", mypath);
+ exit(1);
+ }
+ for (i = 0; i < 10; i++) {
+ values = 0;
+ err = profile_get_values(p, names, &values);
+ if (err == 0 && values != 0)
+ profile_free_list(values);
+ }
+ profile_release(p);
+ }
+ return 0;
+}
+
+static void *modifier(void *arg)
+{
+ struct timespec req;
+ while (!done) {
+ req.tv_sec = 0;
+ req.tv_nsec = random() & 499999999;
+ nanosleep(&req, 0);
+ utime(filename, 0);
+/* printf("."), fflush(stdout); */
+ }
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+ pthread_t thr;
+
+ prog = argv[0];
+ for (i = 0; i < nthreads; i++) {
+ assert(0 == pthread_create(&thr, 0, worker, 0));
+ }
+ sleep(1);
+ pthread_create(&thr, 0, modifier, 0);
+ sleep(delay);
+ done = 1;
+ sleep(2);
+ return 0;
+}