]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/jcr.c
Fix reload algorithm + reload orphaned buffer + term_wait destruction
[bacula/bacula] / bacula / src / lib / jcr.c
index 10dd419d6ba94e20e8f6db53a99d65140e71bc16..eebb5244de8893ac96d126477b97aaba6fbeb58b 100755 (executable)
@@ -158,18 +158,21 @@ void unlock_last_jobs_list()
 /*
  * Push a subroutine address into the job end callback stack
  */
-void job_end_push(JCR *jcr, void job_end_cb(JCR *jcr))
+void job_end_push(JCR *jcr, void job_end_cb(JCR *jcr,void *), void *ctx)
 {
-   jcr->job_end_push.prepend((void *)job_end_cb);
+   jcr->job_end_push.append((void *)job_end_cb);
+   jcr->job_end_push.append(ctx);
 }
 
 /* Pop each job_end subroutine and call it */
 static void job_end_pop(JCR *jcr)
 {
-   void (*job_end_cb)(JCR *jcr);
-   for (int i=0; i<jcr->job_end_push.size(); i++) {
-      job_end_cb = (void (*)(JCR *))jcr->job_end_push.get(i);
-      job_end_cb(jcr);
+   void (*job_end_cb)(JCR *jcr, void *ctx);
+   void *ctx;
+   for (int i=jcr->job_end_push.size()-1; i > 0; ) {
+      ctx = jcr->job_end_push.get(i--);
+      job_end_cb = (void (*)(JCR *,void *))jcr->job_end_push.get(i--);
+      job_end_cb(jcr, ctx);
    }
 }