diff options
| author | Jakob Unterwurzacher | 2020-07-29 20:29:24 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2020-07-29 20:29:24 +0200 | 
| commit | 507345929617876f306b20eb541c9126945fba2c (patch) | |
| tree | 18bed51732696bb27933ef52e17a4a73a67d029c /contrib/getdents-debug | |
| parent | 13f1980dc4d9b4c0545ff3499da9da9c6d5cc505 (diff) | |
Revert "getdents_c: read from two threads"
This made the code more complicated without reproducing
the problem.
This reverts commit 77632b7554000f2e832a0e9fded1a3894b2502c3.
Diffstat (limited to 'contrib/getdents-debug')
| -rw-r--r-- | contrib/getdents-debug/getdents_c/Makefile | 2 | ||||
| -rw-r--r-- | contrib/getdents-debug/getdents_c/getdents.c | 65 | 
2 files changed, 17 insertions, 50 deletions
| diff --git a/contrib/getdents-debug/getdents_c/Makefile b/contrib/getdents-debug/getdents_c/Makefile index 1a9d4d2..95e47dc 100644 --- a/contrib/getdents-debug/getdents_c/Makefile +++ b/contrib/getdents-debug/getdents_c/Makefile @@ -1,2 +1,2 @@  getdents_c: *.c Makefile -	gcc getdents.c -lpthread -o getdents_c +	gcc getdents.c -o getdents_c diff --git a/contrib/getdents-debug/getdents_c/getdents.c b/contrib/getdents-debug/getdents_c/getdents.c index d504976..936bd0b 100644 --- a/contrib/getdents-debug/getdents_c/getdents.c +++ b/contrib/getdents-debug/getdents_c/getdents.c @@ -1,7 +1,6 @@  // See ../getdents/getdents.go for some info on why  // this exists. -#define _GNU_SOURCE  #include <fcntl.h>  #include <stdio.h>  #include <unistd.h> @@ -10,38 +9,6 @@  #include <sys/stat.h>  #include <sys/syscall.h>  #include <errno.h> -#include <pthread.h> - -static pthread_mutex_t mutex; -static int sum; - -struct up { -    pthread_mutex_t *my_mutex; -    pthread_mutex_t *other_mutex; -    int fd; -}; - -void *reader(void *arg) { -    struct up* up = (struct up*)arg; -    int fd = up->fd; -    char tmp[10000]; -    while(1) { -        pthread_mutex_lock(up->my_mutex); -        int n = syscall(SYS_getdents64, fd, tmp, sizeof(tmp)); -        if (n > 0) { -            printf("t%ld: n=%d\n", gettid(), n); -        } else { -            printf("t%ld: n=0 errno=%d total %d bytes\n", gettid(), errno, sum); -            if (n < 0) { -                exit(1); -            } -            pthread_mutex_unlock(up->other_mutex); -            break; -        } -        sum += n; -        pthread_mutex_unlock(up->other_mutex); -    } -}  int main(int argc, char *argv[])  { @@ -54,28 +21,28 @@ int main(int argc, char *argv[])      const char *path = argv[1];      for (int i = 1 ; ; i ++ ) { -        sum = 0;          int fd = open(path, O_RDONLY);          if (fd == -1) {              perror("open");              exit(1);          } -        pthread_t reader1_thread, reader2_thread; -        pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER, m2 = PTHREAD_MUTEX_INITIALIZER; -        pthread_mutex_lock(&m2); -        struct up up1, up2; -        up1.fd = fd; -        up1.my_mutex = &m1; -        up1.other_mutex = &m2; -        up2.fd = fd; -        up2.my_mutex = &m2; -        up2.other_mutex = &m1; -        pthread_create(&reader1_thread, NULL, reader, &up1); -        pthread_create(&reader2_thread, NULL, reader, &up2); -        pthread_join(reader1_thread, NULL); -        pthread_join(reader2_thread, NULL); + +        char tmp[10000]; +        int sum = 0; +        printf("%3d: getdents64: ", i); +        for ( ; ; ) { +            int n = syscall(SYS_getdents64, fd, tmp, sizeof(tmp)); +            printf("n=%d; ", n); +            if (n <= 0) { +                printf("errno=%d total %d bytes\n", errno, sum); +                if (n < 0) { +                    exit(1); +                } +                break; +            } +            sum += n; +        }          close(fd); -        printf("---\n");          usleep(100000);      }  } | 
