]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/devlock.h
First cut of bat rerun a Job from Jobs Run
[bacula/bacula] / bacula / src / lib / devlock.h
index b8ad3513c22395c3b04baf1338335b0aea1d85cb..263c870e96ddf73fdbd460a3b7ee18951efd6963 100644 (file)
@@ -6,7 +6,7 @@
    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.
 #ifndef __DEVLOCK_H
 #define __DEVLOCK_H 1
 
+struct take_lock_t {
+   pthread_t  writer_id;              /* id of writer */
+   int        reason;                 /* save reason */
+   int        prev_reason;            /* previous reason */
+};
+
+
 class devlock {
 private:
    pthread_mutex_t   mutex;
@@ -52,16 +59,21 @@ private:
    int               r_wait;          /* readers waiting */
    int               w_wait;          /* writers waiting */
    int               reason;          /* reason for lock */
-   bool              can_steal;       /* can the lock be stolen? */
+   int               prev_reason;     /* previous reason */
+   bool              can_take;        /* can the lock be taken? */
 
 
 public:
-   devlock(int reason, bool can_steal=false);
+   devlock(int reason, bool can_take=false);
    ~devlock();
    int init(int priority);
    int destroy();
+   int take_lock(take_lock_t *hold, int reason);
+   int return_lock(take_lock_t *hold);
+   void new_reason(int nreason) { prev_reason = reason; reason = nreason; };
+   void restore_reason() { reason = prev_reason; prev_reason = 0; };
 
-   int writelock(int reason, bool can_steal=false); 
+   int writelock(int reason, bool can_take=false); 
    int writetrylock();
    int writeunlock();
    void write_release();