From ccd3477f1d70c978cbb94e580963493ebb21d20b Mon Sep 17 00:00:00 2001 From: Andrij Abyzov Date: Tue, 24 Nov 2020 18:58:06 +0100 Subject: [PATCH] Implement a workaround if readdir system call returns EINTR Signed-off-by: Andrij Abyzov --- src/vfs/local/local.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/vfs/local/local.c b/src/vfs/local/local.c index 2112e1006d..f091b7d281 100644 --- a/src/vfs/local/local.c +++ b/src/vfs/local/local.c @@ -84,13 +84,27 @@ static void * local_opendir (const vfs_path_t * vpath) { DIR **local_info; - DIR *dir; + DIR *dir = 0; const vfs_path_element_t *path_element; path_element = vfs_path_get_by_index (vpath, -1); - dir = opendir (path_element->path); - if (!dir) - return 0; + + while (dir == 0) + { + dir = opendir (path_element->path); + if (!dir) + return 0; + + if (readdir(dir) == 0 && errno == EINTR) + { + closedir(dir); + dir = 0; + } + else + { + rewinddir(dir); + } + } local_info = (DIR **) g_new (DIR *, 1); *local_info = dir;