diff options
| author | Ken Raeburn <raeburn@mit.edu> | 2004-12-12 22:55:55 +0000 |
|---|---|---|
| committer | Ken Raeburn <raeburn@mit.edu> | 2004-12-12 22:55:55 +0000 |
| commit | 398f4520c2a9357d6ab5aff8be6dec89846674bf (patch) | |
| tree | 4e754c4e494a952223d10544a328510db7eae653 /src/tests/threads/prof1.c | |
| parent | 61b07513ee6f0e85b33a705cec403651b2fe28e7 (diff) | |
| download | krb5-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.c | 79 |
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; +} |
