aboutsummaryrefslogtreecommitdiffstats
path: root/community/bareos/fix-bsmtp-segfault.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/bareos/fix-bsmtp-segfault.patch')
-rw-r--r--community/bareos/fix-bsmtp-segfault.patch66
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; }