]> git.sur5r.net Git - bacula/bacula/commitdiff
Ensure that consoles attach jcr to thread, and that only the
authorKern Sibbald <kern@sibbald.com>
Tue, 25 Nov 2008 08:09:23 +0000 (08:09 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 25 Nov 2008 08:09:23 +0000 (08:09 +0000)
     thread attached is removed from the TSD.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8081 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/ua_server.c
bacula/src/lib/jcr.c
bacula/src/lib/protos.h
bacula/src/version.h
bacula/technotes-2.5

index 34c4b89c6193c5db92f4579cbe968ac998778a02..3a6076b44952d67e240ecf8bf5dfe717e7fd2901 100644 (file)
@@ -126,6 +126,7 @@ static void *handle_UA_client_request(void *arg)
 
    ua = new_ua_context(jcr);
    ua->UA_sock = user;
+   set_jcr_in_tsd(jcr);
 
    user->recv();             /* Get first message */
    if (!authenticate_user_agent(ua)) {
index 961376bf729c96758b1b2c32c75da68841758239..b7ce11cbb9f52cc4c1a397775e9aadae4b3b10fc 100644 (file)
@@ -474,8 +474,7 @@ static void free_common_jcr(JCR *jcr)
       free_guid_list(jcr->id_list);
       jcr->id_list = NULL;
    }
-   /* Invalidate the tsd jcr data */
-   set_jcr_in_tsd(INVALID_JCR);
+   remove_jcr_from_tsd(jcr);
    free(jcr);
 }
 
@@ -579,6 +578,21 @@ void free_jcr(JCR *jcr)
    Dmsg0(dbglvl, "Exit free_jcr\n");
 }
 
+/*
+ * Remove jcr from thread specific data, but
+ *   but make sure it is us who are attached.
+ */
+void remove_jcr_from_tsd(JCR *jcr)
+{
+   JCR *tjcr = get_gcr_from_tsd();
+   if (tjcr == jcr) { 
+      set_jcr_in_tsd(INVALID_JCR);
+   }
+}
+
+/*
+ * Put this jcr in the thread specifc data 
+ */
 void set_jcr_in_tsd(JCR *jcr)
 {
    int status = pthread_setspecific(jcr_key, (void *)jcr);
@@ -588,6 +602,9 @@ void set_jcr_in_tsd(JCR *jcr)
    }
 }
 
+/*
+ * Give me the jcr that is attached to this thread
+ */
 JCR *get_jcr_from_tsd()
 {
    JCR *jcr = (JCR *)pthread_getspecific(jcr_key);
index 34a336295b58fb6a12f1ce7d6e30296f20d9df80..fa662a4881df43247afaf56fc027f8896a540f58 100644 (file)
@@ -206,6 +206,7 @@ void jcr_walk_end(JCR *jcr);
 uint32_t get_jobid_from_tsd();             
 JCR *get_jcr_from_tsd();
 void set_jcr_in_tsd(JCR *jcr);
+void remove_jcr_from_tsd(JCR *jcr);
 
 
 /* lex.c */
index 454485e50e035a770ec310f060a5e9ce09d5e212..41b6ccfe37564975d3ea24d05755d43a525a033b 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.5.20"
-#define BDATE   "22 November 2008"
-#define LSMDATE "22Nov08"
+#define BDATE   "25 November 2008"
+#define LSMDATE "25Nov08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index 2c00e8109362c406263c124e153142f15126e695..10ab6e02d09541b64e15f1c1bc33e5ea02c40932 100644 (file)
@@ -10,6 +10,9 @@ filepattern (restore with regex in bsr)
 mixed priorities
 
 General:
+25Nov08
+kes  Ensure that consoles attach jcr to thread, and that only the
+     thread attached is removed from the TSD.
 24Nov08
 kes  Move definition of FileId_t to bc_types and define it once in the jcr.
 22Nov08