Procházet zdrojové kódy

dpkg: Report deferred trigger errors on status-fd

Report these errors directly through status-fd, instead of reporting
later on errors which are a consequence of those first errors, which
can be pretty confusing for a front-end.

Closes: #574599

Signed-off-by: Guillem Jover <guillem@debian.org>
Michael Vogt před 16 roky
rodič
revize
0085bfd195
2 změnil soubory, kde provedl 15 přidání a 0 odebrání
  1. 4 0
      debian/changelog
  2. 11 0
      src/trigproc.c

+ 4 - 0
debian/changelog

@@ -33,6 +33,10 @@ dpkg (1.15.6.2) UNRELEASED; urgency=low
     file objects. A typo meant that the former never triggered rename
     deferral. Closes: #577756
 
+  [ Guillem Jover ]
+  * Report deferred trigger errors on status-fd. Closes: #574599
+    Thanks to Michael Vogt <michael.vogt@ubuntu.com>.
+
   [ Updated dpkg translations ]
   * German (Sven Joachim).
 

+ 11 - 0
src/trigproc.c

@@ -103,6 +103,8 @@ trigproc_enqueue_deferred(struct pkginfo *pend)
 void
 trigproc_run_deferred(void)
 {
+	jmp_buf ejbuf;
+
 	debug(dbg_triggers, "trigproc_run_deferred");
 	while (!pkg_queue_is_empty(&deferred)) {
 		struct pkginfo *pkg;
@@ -111,8 +113,17 @@ trigproc_run_deferred(void)
 		if (!pkg)
 			continue;
 
+		if (setjmp(ejbuf)) {
+			error_unwind(ehflag_bombout);
+			continue;
+		}
+		push_error_handler(&ejbuf, print_error_perpackage, pkg->name);
+
 		pkg->clientdata->trigprocdeferred = NULL;
 		trigproc(pkg);
+
+		set_error_display(NULL, NULL);
+		error_unwind(ehflag_normaltidy);
 	}
 }