]> git.sur5r.net Git - bacula/bacula/commitdiff
Add mutex some priority info for SD
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Dec 2009 14:29:33 +0000 (15:29 +0100)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Dec 2009 14:35:00 +0000 (15:35 +0100)
bacula/src/stored/dev.c
bacula/src/stored/dev.h
bacula/src/stored/vol_mgr.c

index 36b03d92362acb2f9227f3afbbbab459d7b3a259..2535dfc5c52098efc5f3ba3924ec235fad7d7b6f 100644 (file)
@@ -267,6 +267,10 @@ init_dev(JCR *jcr, DEVRES *device)
       Mmsg1(dev->errmsg, _("Unable to init mutex: ERR=%s\n"), be.bstrerror(errstat));
       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
    }
+   /* Ensure that we respect this order in P/V operations */
+   bthread_mutex_set_priority(&dev->m_mutex,       PRIO_SD_DEV_ACCESS);
+   bthread_mutex_set_priority(&dev->spool_mutex,   PRIO_SD_DEV_SPOOL);
+   bthread_mutex_set_priority(&dev->acquire_mutex, PRIO_SD_DEV_ACQUIRE);
 #ifdef xxx
    if ((errstat = rwl_init(&dev->lock)) != 0) {
       berrno be;
index 8a5a6f1344603fe1553e246589a50c00f803004f..93baea05f7dfc472d4134ed526dcb6aeb62ffefc 100644 (file)
@@ -221,9 +221,9 @@ private:
 public:
    DEVICE * volatile swap_dev;        /* Swap vol from this device */
    dlist *attached_dcrs;              /* attached DCR list */
-   pthread_mutex_t m_mutex;           /* access control */
-   pthread_mutex_t spool_mutex;       /* mutex for updating spool_size */
-   pthread_mutex_t acquire_mutex;     /* mutex for acquire code */
+   bthread_mutex_t m_mutex;           /* access control */
+   bthread_mutex_t spool_mutex;       /* mutex for updating spool_size */
+   bthread_mutex_t acquire_mutex;     /* mutex for acquire code */
    pthread_cond_t wait;               /* thread wait variable */
    pthread_cond_t wait_next_vol;      /* wait for tape to be mounted */
    pthread_t no_wait_id;              /* this thread must not wait */
@@ -498,7 +498,7 @@ private:
 public:
    dlink dev_link;                    /* link to attach to dev */
    JCR *jcr;                          /* pointer to JCR */
-   pthread_mutex_t m_mutex;           /* access control */
+   bthread_mutex_t m_mutex;           /* access control */
    DEVICE * volatile dev;             /* pointer to device */
    DEVRES *device;                    /* pointer to device resource */
    DEV_BLOCK *block;                  /* pointer to block */
index 61b2c9fbb7cfb459256154e55f0405361954353b..dff4f21454a6c23ef81391227b2ec8d2d7a9257d 100644 (file)
@@ -90,7 +90,7 @@ int vol_list_lock_count = 0;
 void init_vol_list_lock()
 {
    int errstat;
-   if ((errstat=rwl_init(&vol_list_lock)) != 0) {
+   if ((errstat=rwl_init(&vol_list_lock, PRIO_SD_VOL_LIST)) != 0) {
       berrno be;
       Emsg1(M_ABORT, 0, _("Unable to initialize volume list lock. ERR=%s\n"),
             be.bstrerror(errstat));
@@ -102,8 +102,6 @@ void term_vol_list_lock()
    rwl_destroy(&vol_list_lock);
 }
 
-
-
 /* 
  * This allows a given thread to recursively call to lock_volumes()
  */