]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/rwlock.c
First cut of bat rerun a Job from Jobs Run
[bacula/bacula] / bacula / src / lib / rwlock.c
index 908d5c3764d016e26611a31b709b2e6a3f4f254f..b1ce1e2e9827e0a2f2853d33382e1a5bca8c7d62 100644 (file)
@@ -1,12 +1,12 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2010 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
-   modify it under the terms of version two of the GNU General Public
+   modify it under the terms of version three of the GNU Affero General Public
    License as published by the Free Software Foundation and included
    in the file LICENSE.
 
@@ -15,7 +15,7 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
+   You should have received a copy of the GNU Affero General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
  *  Returns: 0 on success
  *           errno on failure
  */
-int rwl_init(brwlock_t *rwl)
+int rwl_init(brwlock_t *rwl, int priority)
 {
    int stat;
 
    rwl->r_active = rwl->w_active = 0;
    rwl->r_wait = rwl->w_wait = 0;
+   rwl->priority = priority;
    if ((stat = pthread_mutex_init(&rwl->mutex, NULL)) != 0) {
       return stat;
    }
@@ -218,7 +219,7 @@ int rwl_readunlock(brwlock_t *rwl)
  * Lock for write access, wait until locked (or error).
  *   Multiple nested write locking is permitted.
  */
-int rwl_writelock(brwlock_t *rwl)
+int rwl_writelock_p(brwlock_t *rwl, const char *file, int line)
 {
    int stat;
 
@@ -233,7 +234,7 @@ int rwl_writelock(brwlock_t *rwl)
       pthread_mutex_unlock(&rwl->mutex);
       return 0;
    }
-   lmgr_pre_lock(rwl);
+   lmgr_pre_lock(rwl, rwl->priority, file, line);
    if (rwl->w_active || rwl->r_active > 0) {
       rwl->w_wait++;                  /* indicate that we are waiting */
       pthread_cleanup_push(rwl_write_release, (void *)rwl);
@@ -278,7 +279,7 @@ int rwl_writetrylock(brwlock_t *rwl)
    } else {
       rwl->w_active = 1;              /* we are running */
       rwl->writer_id = pthread_self(); /* save writer thread's id */
-      lmgr_do_lock(rwl);
+      lmgr_do_lock(rwl, rwl->priority, __FILE__, __LINE__);
    }
    stat2 = pthread_mutex_unlock(&rwl->mutex);
    return (stat == 0 ? stat2 : stat);
@@ -460,7 +461,7 @@ int main (int argc, char *argv[])
     for (data_count = 0; data_count < DATASIZE; data_count++) {
         data[data_count].data = 0;
         data[data_count].writes = 0;
-        status = rwl_init (&data[data_count].lock);
+        status = rwl_init(&data[data_count].lock);
         if (status != 0) {
            berrno be;
            printf("Init rwlock failed. ERR=%s\n", be.bstrerror(status));
@@ -634,7 +635,7 @@ int main (int argc, char *argv[])
     for (data_count = 0; data_count < DATASIZE; data_count++) {
         data[data_count].data = 0;
         data[data_count].updates = 0;
-        rwl_init (&data[data_count].lock);
+        rwl_init(&data[data_count].lock);
     }
 
     /*