new test prog "prof1" for profile reloading
authorKen Raeburn <raeburn@mit.edu>
Sun, 12 Dec 2004 22:55:55 +0000 (22:55 +0000)
committerKen Raeburn <raeburn@mit.edu>
Sun, 12 Dec 2004 22:55:55 +0000 (22:55 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16931 dc483132-0cff-0310-8789-dd5450dbe970

src/tests/threads/ChangeLog
src/tests/threads/Makefile.in
src/tests/threads/prof1.c [new file with mode: 0644]

index b4c90abb39af45db7f60bb64d14899484df18336..32fde2353a9741b33d9a763fd591284ff9cd16ed 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-12  Ken Raeburn  <raeburn@mit.edu>
+
+       * prof1.c: New file.
+       * Makefile.in (prof1, prof1.o): New targets.
+
 2004-08-03  Ken Raeburn  <raeburn@mit.edu>
 
        * Makefile.in, t_rcache.c: New files.
index dfcc03127e7ab4d82a35697ea70bb63aa8fab093..c164717e78d4557833b942d5842dd896e68240f1 100644 (file)
@@ -24,6 +24,11 @@ syms: syms.o
 run-syms: syms
        $(RUN_SETUP) ./syms
 
+prof1: prof1.o $(KRB5_BASE_DEPLIBS)
+       $(CC_LINK) -o prof1 prof1.o $(KRB5_BASE_LIBS) -lpthread
+
+prof1.o: prof1.c
+
 check-unix:: run-t_rcache
 
 install::
diff --git a/src/tests/threads/prof1.c b/src/tests/threads/prof1.c
new file mode 100644 (file)
index 0000000..766bfa3
--- /dev/null
@@ -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;
+}