From 7362647e2f29334cd1bb4236f2403222794124a8 Mon Sep 17 00:00:00 2001 From: Sean Bright <sean.bright@gmail.com> Date: Mon, 7 Oct 2019 14:02:39 -0500 Subject: [PATCH] Revert "app_voicemail: Cleanup stale lock files on module load" This reverts commit fd2e8d0da7ba539470ed73d463d8bc641f7843af. Reason for revert: Problematic for users who store their voicemail on network storage devices, or share voicemail storage between multiple Asterisk instances. ASTERISK-28567 #close Change-Id: I3ff4ca983d8e753fe2971f3439bd154705693c41 --- apps/app_voicemail.c | 51 ------------------- .../voicemail_lock_cleanup_revert.txt | 10 ++++ 2 files changed, 10 insertions(+), 51 deletions(-) create mode 100644 doc/CHANGES-staging/voicemail_lock_cleanup_revert.txt diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index fe1ce349d6..7343bb2e56 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -3745,54 +3745,6 @@ static void check_quota(struct vm_state *vms, char *mailbox) { #endif /* IMAP_STORAGE */ -static void cleanup_orphaned_lock_files(const char *base) -{ - DIR *dir; - struct dirent *e; - - dir = opendir(base); - if (!dir) { - /* Don't complain about this too loudly */ - ast_debug(2, "Unable to open `%s': %s\n", base, strerror(errno)); - return; - } - - while ((e = readdir(dir))) { - char *fullpath; - struct stat s; - - /* Always skip . and .. */ - if (!strcmp(e->d_name, ".") || !strcmp(e->d_name, "..")) { - continue; - } - - /* Build up the full path (using dynamic memory because PATH_MAX is crap) */ - if (ast_asprintf(&fullpath, "%s/%s", base, e->d_name) == -1) { - break; - } - - if (lstat(fullpath, &s) < 0) { - ast_free(fullpath); - continue; - } - - /* This is exposing an implementation detail of ast_lock_path, but it makes - * our life a bit easier */ - if (!strcmp(e->d_name, ".lock") && S_ISLNK(s.st_mode)) { - if (!ast_unlock_path(base)) { - ast_log(AST_LOG_NOTICE, "Cleaned up orphaned lock file: %s/.lock\n", base); - } - } else if (S_ISDIR(s.st_mode)) { - /* If it is a directory, let's dive down */ - cleanup_orphaned_lock_files(fullpath); - } - - ast_free(fullpath); - } - - closedir(dir); -} - /*! \brief Lock file path * only return failure if ast_lock_path returns 'timeout', * not if the path does not exist or any other reason @@ -15247,9 +15199,6 @@ static int load_module(void) /* compute the location of the voicemail spool directory */ snprintf(VM_SPOOL_DIR, sizeof(VM_SPOOL_DIR), "%s/voicemail/", ast_config_AST_SPOOL_DIR); - /* Now that we have a spool directory, clean up old lock files */ - cleanup_orphaned_lock_files(VM_SPOOL_DIR); - if (!(mwi_subscription_tps = ast_taskprocessor_get("app_voicemail", 0))) { ast_log(AST_LOG_WARNING, "failed to reference mwi subscription taskprocessor. MWI will not work\n"); } diff --git a/doc/CHANGES-staging/voicemail_lock_cleanup_revert.txt b/doc/CHANGES-staging/voicemail_lock_cleanup_revert.txt new file mode 100644 index 0000000000..500c9a4d7a --- /dev/null +++ b/doc/CHANGES-staging/voicemail_lock_cleanup_revert.txt @@ -0,0 +1,10 @@ +Subject: app_voicemail + +A feature was added in Asterisk 13.27.0 and 16.4.0 that removed lock files from +the Asterisk voicemail directory on startup. Some users that store their +voicemails on network storage devices experienced slow startup times due to the +relative expense of traversing the voicemail directory structure looking for +orphaned lock files. This feature has now been removed. + +Users who require the lock files to be removed at startup should modify their +startup scripts to do so before starting the asterisk process. -- GitLab