diff options
Diffstat (limited to 'community/bareos/fix-bsmtp-segfault.patch')
-rw-r--r-- | community/bareos/fix-bsmtp-segfault.patch | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/community/bareos/fix-bsmtp-segfault.patch b/community/bareos/fix-bsmtp-segfault.patch index 8712f68a98..41c3a380da 100644 --- a/community/bareos/fix-bsmtp-segfault.patch +++ b/community/bareos/fix-bsmtp-segfault.patch @@ -1,46 +1,40 @@ -Patch from Michael Cassaniti, posted here: -https://bugs.alpinelinux.org/issues/10156#note-5 -Until this issue is fixed upstream this patch is needed. - -diff --git a/src/lib/jcr.c b/src/lib/jcr.c -index 00bfe8c87..338f90e59 100644 ---- a/src/lib/jcr.c -+++ b/src/lib/jcr.c -@@ -77,6 +77,7 @@ static pthread_mutex_t jcr_lock = PTHREAD_MUTEX_INITIALIZER; +--- old/core/src/lib/jcr.cc ++++ new/core/src/lib/jcr.cc +@@ -79,6 +79,7 @@ static pthread_mutex_t job_start_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t last_jobs_mutex = PTHREAD_MUTEX_INITIALIZER; - + +static bool jcr_initialized = false; #ifdef HAVE_WIN32 static bool tsd_initialized = false; - static pthread_key_t jcr_key; /* Pointer to jcr for each thread */ -@@ -351,6 +352,8 @@ static void create_jcr_key() - berrno be; - Jmsg1(NULL, M_ABORT, 0, _("pthread key create failed: ERR=%s\n"), - be.bstrerror(status)); -+ } else { -+ jcr_initialized = true; - } + static pthread_key_t jcr_key; /* Pointer to jcr for each thread */ +@@ -324,6 +325,8 @@ + if (status != 0) { + BErrNo be; + Jmsg1(nullptr, M_ABORT, 0, _("pthread key create failed: ERR=%s\n"), be.bstrerror(status)); ++ } else { ++ jcr_initialized = true; + } } - -@@ -719,7 +722,10 @@ void set_jcr_in_tsd(JCR *jcr) + +@@ -681,7 +684,10 @@ */ - JCR *get_jcr_from_tsd() + JobControlRecord *get_jcr_from_tsd() { -- JCR *jcr = (JCR *)pthread_getspecific(jcr_key); -+ JCR *jcr = (JCR *)INVALID_JCR; -+ if (jcr_initialized){ -+ jcr = (JCR *)pthread_getspecific(jcr_key); -+ } - - /* - * Set any INVALID_JCR to NULL which the rest of BAREOS understands -@@ -736,7 +742,7 @@ JCR *get_jcr_from_tsd() +- JobControlRecord *jcr = (JobControlRecord *)pthread_getspecific(jcr_key); ++ JobControlRecord *jcr = (JobControlRecord *)INVALID_JCR; ++ if (jcr_initialized){ ++ jcr = (JobControlRecord *)pthread_getspecific(jcr_key); ++ } + + /* + * Set any INVALID_JCR to nullptr which the rest of BAREOS understands +@@ -696,7 +702,7 @@ */ - uint32_t get_jobid_from_tsd() + uint32_t GetJobidFromTsd() { -- JCR *jcr = (JCR *)pthread_getspecific(jcr_key); -+ JCR *jcr = get_jcr_from_tsd(); - uint32_t JobId = 0; - - if (jcr && jcr != INVALID_JCR) { +- JobControlRecord *jcr = (JobControlRecord *)pthread_getspecific(jcr_key); ++ JobControlRecord *jcr = get_jcr_from_tsd(); + uint32_t JobId = 0; + + if (jcr && jcr != INVALID_JCR) { JobId = (uint32_t)jcr->JobId; } |