From: Ken Raeburn Date: Sun, 12 Dec 2004 22:55:55 +0000 (+0000) Subject: new test prog "prof1" for profile reloading X-Git-Tag: ms-bug-test-20060525~434 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=398f4520c2a9357d6ab5aff8be6dec89846674bf;p=krb5.git new test prog "prof1" for profile reloading git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16931 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/src/tests/threads/ChangeLog b/src/tests/threads/ChangeLog index b4c90abb3..32fde2353 100644 --- a/src/tests/threads/ChangeLog +++ b/src/tests/threads/ChangeLog @@ -1,3 +1,8 @@ +2004-12-12 Ken Raeburn + + * prof1.c: New file. + * Makefile.in (prof1, prof1.o): New targets. + 2004-08-03 Ken Raeburn * Makefile.in, t_rcache.c: New files. diff --git a/src/tests/threads/Makefile.in b/src/tests/threads/Makefile.in index dfcc03127..c164717e7 100644 --- a/src/tests/threads/Makefile.in +++ b/src/tests/threads/Makefile.in @@ -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 index 000000000..766bfa3d0 --- /dev/null +++ b/src/tests/threads/prof1.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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; +}