]> git.sur5r.net Git - bacula/bacula/commitdiff
update lock manager to get better traces
authorEric Bollengier <eric@eb.homelinux.org>
Thu, 13 Aug 2009 21:42:53 +0000 (23:42 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 13 Aug 2009 21:42:53 +0000 (23:42 +0200)
bacula/src/lib/lockmgr.c
bacula/src/lib/lockmgr.h
bacula/src/lib/rwlock.c
bacula/technotes

index 9cf9649c5039999a62841863f7cf2725e71d488a..f8876e3bbc5f7e2ed0467c590c1147ecca488f35 100644 (file)
@@ -637,13 +637,14 @@ int lmgr_mutex_unlock(pthread_mutex_t *m, const char *file, int line)
 /* TODO: check this
  */
 int lmgr_cond_wait(pthread_cond_t *cond,
-                   pthread_mutex_t *mutex)
+                   pthread_mutex_t *mutex,
+                   const char *file, int line)
 {
    int ret;
    lmgr_thread_t *self = lmgr_get_thread_info();
-   self->do_V(mutex);   
+   self->do_V(mutex, file, line);   
    ret = pthread_cond_wait(cond, mutex);
-   self->pre_P(mutex);
+   self->pre_P(mutex, file, line);
    self->post_P();
    return ret;
 }
@@ -655,10 +656,10 @@ int lmgr_cond_wait(pthread_cond_t *cond,
  * pthread_mutex_lock(m);
  * lmgr_post_lock(m);
  */
-void lmgr_pre_lock(void *m)
+void lmgr_pre_lock(void *m, const char *file, int line)
 {
    lmgr_thread_t *self = lmgr_get_thread_info();
-   self->pre_P(m);
+   self->pre_P(m, file, line);
 }
 
 /*
@@ -673,10 +674,10 @@ void lmgr_post_lock()
 /*
  * Do directly pre_P and post_P (used by trylock)
  */
-void lmgr_do_lock(void *m)
+void lmgr_do_lock(void *m, const char *file, int line)
 {
    lmgr_thread_t *self = lmgr_get_thread_info();
-   self->pre_P(m);
+   self->pre_P(m, file, line);
    self->post_P();
 }
 
index 83d9b3c879bf0ed73fd95c9300b94dc6075515ed..173c90537223ad0c2e0916e48f400715a27c6cb9 100644 (file)
@@ -47,7 +47,8 @@ void lmgr_v(pthread_mutex_t *m);
 
 /* Not yet working */
 int lmgr_cond_wait(pthread_cond_t *cond,
-                   pthread_mutex_t *mutex);
+                   pthread_mutex_t *mutex,
+                   const char *file="*unknown*", int line=0);
 
 /* Replacement of pthread_mutex_lock() */
 int lmgr_mutex_lock(pthread_mutex_t *m, 
@@ -60,10 +61,18 @@ int lmgr_mutex_unlock(pthread_mutex_t *m,
 /* 
  * Use them when you want use your lock yourself (ie rwlock)
  */
-void lmgr_pre_lock(void *m);    /* Call before requesting the lock */
-void lmgr_post_lock();          /* Call after getting it */
-void lmgr_do_lock(void *m);     /* Same as pre+post lock */
-void lmgr_do_unlock(void *m);   /* Call just before releasing the lock */
+
+/* Call before requesting the lock */
+void lmgr_pre_lock(void *m, const char *file="*unknown*", int line=0);
+
+/* Call after getting it */ 
+void lmgr_post_lock();
+
+/* Same as pre+post lock */
+void lmgr_do_lock(void *m, const char *file="*unknown*", int line=0);
+
+/* Call just before releasing the lock */
+void lmgr_do_unlock(void *m); 
 
 /*
  * Each thread have to call this function to put a lmgr_thread_t object
@@ -119,7 +128,7 @@ int lmgr_thread_create(pthread_t *thread,
 # define V(x) lmgr_mutex_unlock(&(x), __FILE__, __LINE__)
 # define pthread_mutex_lock(x)       lmgr_mutex_lock(x, __FILE__, __LINE__)
 # define pthread_mutex_unlock(x)     lmgr_mutex_unlock(x, __FILE__, __LINE__)
-# define pthread_cond_wait(x,y)      lmgr_cond_wait(x,y)
+# define pthread_cond_wait(x,y)      lmgr_cond_wait(x,y, __FILE__, __LINE__)
 # define pthread_create(a, b, c, d)  lmgr_thread_create(a,b,c,d)
 #endif
 
index 908d5c3764d016e26611a31b709b2e6a3f4f254f..e91b9eab373d02f67bfef8faa74d4a18a819e2bc 100644 (file)
@@ -233,7 +233,7 @@ int rwl_writelock(brwlock_t *rwl)
       pthread_mutex_unlock(&rwl->mutex);
       return 0;
    }
-   lmgr_pre_lock(rwl);
+   lmgr_pre_lock(rwl, __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 +278,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, __FILE__, __LINE__);
    }
    stat2 = pthread_mutex_unlock(&rwl->mutex);
    return (stat == 0 ? stat2 : stat);
index 16441d752403ad9025279119744a97fffe5df6c9..ed456455f6d8ba95daba88c5ec4db499006e9584 100644 (file)
@@ -3,6 +3,7 @@
 General:
 
 13Aug09
+ebl  update lock manager to display file:line all the time
 kes  Make SD lock tracing work again. Has not worked for some time.
 ebl  bat: Add a re-run button on job info page, that allows to
           run the selected job with the same properties (level, pool,