On Tue, Apr 06, 2021 at 08:49:10PM +0200, Marc Espie wrote:
> On Sun, Apr 04, 2021 at 09:56:49PM +0200, Preben Guldberg wrote:
> > Below is a patch that suppresses errors I get when running dpb with -I:
> > 
> >     Use of uninitialized value $ts in sprintf at 
> > /usr/ports/infrastructure/lib/DPB/Util.pm line 58.
> >     DPB::Util::ts2string(DPB::Util, <undef>) called at 
> > /usr/ports/infrastructure/lib/DPB/Job/Port.pm line 1107
> >     
> > DPB::Job::BasePort::timings(DPB::Job::Port::Install=HASH(0xf3c120630d0)(sysutils/iwatch))
> >  called at /usr/ports/infrastructure/lib/DPB/Job/Port.pm line 964
> >     
> > DPB::Job::BasePort::__ANON__(DPB::Core=HASH(0xf3c1203be38)(localhost:sysutils/iwatch))
> >  called at /usr/ports/infrastructure/lib/DPB/Job.pm line 189
> >     
> > DPB::Job::Normal::finalize(DPB::Job::Port::Install=HASH(0xf3c120630d0)(sysutils/iwatch),
> >  DPB::Core=HASH(0xf3c1203be38)(localhost:sysutils/iwatch)) called at /
> >     [... snip - longer example at the end ...]
> > 
> > If I run with -P instead of -I, the errors are not seen.
> > 
> > The diff at the end avoids a DPB::Util->ts2string($self->{watched}{max})
> > call when $self->{watched} is undefined.  My feeling is that the install
> > phase does not watch for stuck processes at all, so it benefits from
> > this.
> > 
> > Whether this is the right way or place to address the problem, I don't
> > know, but with the patch the errors are suppressed for me.
> 
> Naddy reported something similar.
> 
> The actual fix would be somewhat different. Watch is set in an odd location
> in PortBuilder, whereas it should probably be done at the end of
> Job::BasePort->new
> 
> (Install could very well get stuck, because install will run build as well
> if the package doesn't already exist, so watched should always be set)
> 
> I have a patch for this but I haven't been able to test it yet because my
> dpb boxes are busy with something else.
Previous patch was a brainfart, I had somehow refactored the code in
the wrong base class (e.g., not a base class at all)

Setting a watched uniformously in DPB::Job::BasePort looks like this:

Index: PortBuilder.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/DPB/PortBuilder.pm,v
retrieving revision 1.88
diff -u -p -r1.88 PortBuilder.pm
--- PortBuilder.pm      21 Mar 2021 19:17:34 -0000      1.88
+++ PortBuilder.pm      14 Apr 2021 15:19:18 -0000
@@ -255,7 +255,6 @@ sub build
                $self->report($v, $job, $core); 
                &$final_sub($job->{failed});
        });
-       $job->set_watch($self->logger, $v);
        $core->start_job($job, $v);
        # lonesome takes precedence for swallowing everything
        if ($job->{lonesome}) {
@@ -283,7 +282,6 @@ sub wipe
                $self->report($v, $job, $core); 
                &$final_sub($job->{failed});
        });
-       $job->set_watch($self->logger, $v);
        $core->start_job($job, $v);
 }
 
Index: Job/Port.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/DPB/Job/Port.pm,v
retrieving revision 1.204
diff -u -p -r1.204 Port.pm
--- Job/Port.pm 21 Mar 2021 19:17:34 -0000      1.204
+++ Job/Port.pm 14 Apr 2021 15:19:18 -0000
@@ -969,6 +969,7 @@ sub new
        $job->{current} = '';
        # for stuff that doesn't really lock
        $job->{lock} //= DPB::DummyLock->new;
+       $job->set_watch($job->{builder}->logger, $job->{v});
 
        return $job;
 }

Reply via email to