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; 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; } } @@ -719,7 +722,10 @@ void set_jcr_in_tsd(JCR *jcr) */ JCR *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() */ uint32_t get_jobid_from_tsd() { - JCR *jcr = (JCR *)pthread_getspecific(jcr_key); + JCR *jcr = get_jcr_from_tsd(); uint32_t JobId = 0; if (jcr && jcr != INVALID_JCR) {