diff -Nru dazukofs-3.0.0a/test/Makefile dazukofs-3.0.0b/test/Makefile --- dazukofs-3.0.0a/test/Makefile 2008-09-24 20:42:48.000000000 +0200 +++ dazukofs-3.0.0b/test/Makefile 2009-02-26 22:15:12.000000000 +0100 @@ -4,14 +4,19 @@ CFLAGS = -Wall -fPIC -O2 -Ilib LDFLAGS = -Llib +all: showfiles showfiles_mt + showfiles: showfiles.c lib/libdazukofs.so $(CC) $(CFLAGS) $(LDFLAGS) showfiles.c -ldazukofs -o showfiles +showfiles_mt: showfiles_mt.c lib/libdazukofs.so + $(CC) $(CFLAGS) $(LDFLAGS) showfiles_mt.c -ldazukofs -lpthread -o showfiles_mt + lib/libdazukofs.so: $(MAKE) -C lib clean: $(MAKE) -C lib clean - $(RM) -f showfiles + $(RM) -f showfiles showfiles_mt .PHONY: clean diff -Nru dazukofs-3.0.0a/test/showfiles_mt.c dazukofs-3.0.0b/test/showfiles_mt.c --- dazukofs-3.0.0a/test/showfiles_mt.c 1970-01-01 01:00:00.000000000 +0100 +++ dazukofs-3.0.0b/test/showfiles_mt.c 2009-02-26 22:42:41.000000000 +0100 @@ -0,0 +1,111 @@ +#include "dazukofs.h" +#include +#include +#include +#include +#include +#include + +#define NUMBER_OF_THREADS 10 + +static int running = 1; + +static void print_access(struct dazukofs_access *acc) +{ + char filename[1024]; + + if (dazukofs_get_filename(acc, filename, sizeof(filename)) > 0) { + printf("tid: %lu pid:%05lu file:%s\n", pthread_self(), acc->pid, + filename); + } else { + fprintf(stderr, "dazukofs_get_filename() failed: %s\n", + strerror(errno)); + printf("pid:%05lu file:???\n", acc->pid); + } +} + +static void sigterm(int sig) +{ + running = 0; + signal(sig, sigterm); +} + +void *thread_proc(void *data) +{ + dazukofs_handle_t hndl; + struct dazukofs_access acc; + sigset_t sigset; + + sigemptyset(&sigset); + sigaddset(&sigset, SIGINT); + sigaddset(&sigset, SIGTERM); + pthread_sigmask(SIG_BLOCK, &sigset, NULL); + sigaddset(&sigset, SIGUSR1); + pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); + + hndl = dazukofs_open("dazukofs_mt_example", DAZUKOFS_TRACK_GROUP); + if (!hndl) { + fprintf(stderr, "dazukofs_open() failed: %s\n", + strerror(errno)); + return NULL; + } + + while (running) { + if (dazukofs_get_access(hndl, &acc) != 0) { + if (running) { + fprintf(stderr, + "dazukofs_get_access() failed: %s\n", + strerror(errno)); + } + break; + } + + print_access(&acc); + + if (dazukofs_return_access(hndl, &acc) != 0) { + if (running) { + fprintf(stderr, + "dazukofs_return_access() failed: %s\n", + strerror(errno)); + } + break; + } + } + + if (dazukofs_close(hndl, DAZUKOFS_REMOVE_GROUP) != 0) { + fprintf(stderr, "dazukofs_close() failed: %s\n", + strerror(errno)); + } + + return NULL; +} + +int main(void) +{ + pthread_t tid[NUMBER_OF_THREADS]; + int i; + + signal(SIGTERM, sigterm); + signal(SIGINT, sigterm); + + for (i = 0 ; i < NUMBER_OF_THREADS ; i++) { + pthread_create(&tid[i], NULL, thread_proc, NULL); + } + + while (running) { + sleep(1); + } + + for (i = 0 ; i < NUMBER_OF_THREADS ; i++) { + pthread_kill(tid[i], SIGUSR1); + } + + for (i = 0 ; i < NUMBER_OF_THREADS ; i++) { + pthread_join(tid[i], NULL); + } + + printf("\nGoodbye.\n"); + + return 0; +} +