[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#964770: lintian: lintian will get stuck on arm64



Package: lintian
Version: 2.83.0
Severity: normal

It seems that lintian will get stuck with it on arm64.
I've confirmed this on arm64. It may happen on other platform, but I don't
know.

This issue does not occur on amd64.

At first, I've faced it on arm64v8:focal cloud image, [1]
but it seems that this issue is not specific to the image itself.

[1] https://bugs.launchpad.net/cloud-images/+bug/1881217

Here is the reproducible steps:

  $ docker run -it arm64v8/debian:unstable
  # apt update
  # apt install -y lintian
  # lintian --help

As a result, lintian does not show usage help.
Here is the version about lintian:

  # dpkg -l | grep lintian
  ii  lintian                          2.83.0                         all          Debian package checker

Additional information:

It seems that IO::Async::Loop related code will stuck:

  # perl -d /usr/bin/lintian --help

  Loading DB routines from perl5db.pl version 1.55
  Editor support available.

  Enter h or 'h h' for help, or 'man perldebug' for more help.

  main::(/usr/bin/lintian:55):    };
    DB<1>
  ^C
  IO::Async::Loop::Epoll::loop_once(/usr/share/perl5/IO/Async/Loop/Epoll.pm:187):
  187:       $self->post_wait;
    DB<1> T
  @ = DB::DB called from file '/usr/share/perl5/IO/Async/Loop/Epoll.pm' line 187
  . = IO::Async::Loop::Epoll::loop_once(ref(IO::Async::Loop::Epoll)) called from
  file '/usr/share/perl5/IO/Async/Loop.pm' line 654
  . = IO::Async::Loop::await(ref(IO::Async::Loop::Epoll), ref(IO::Async::Future))
  called from file '/usr/share/perl5/Lintian/Util.pm' line 628
  $ = Lintian::Util::safe_qx('nproc') called from file
  '/usr/share/perl5/Lintian/Internal/FrontendUtil.pm' line 123
  @ = Lintian::Internal::FrontendUtil::default_parallel() called from file
  '/usr/share/lintian/commands/lintian.pm' line 93
  $ = require '/usr/share/lintian/commands/lintian.pm' called from file
  '/usr/bin/lintian' line 36
  . = eval {...} called from file '/usr/bin/lintian' line 36
  . =
  main::__ANON__[/usr/bin/lintian:55]('/usr/share/lintian/commands/lintian.pm')
  called from file '/usr/bin/lintian' line 120
  . = dplint::run_tool('/usr/bin/lintian', 'lintian') called from file
  '/usr/bin/lintian' line 299
  . = dplint::main() called from file '/usr/bin/lintian' line 383

The trace log indicates that $loop->run_child will stuck at 
safe_qx /usr/share/perl5/Lintian/Util.pm:

   608      my $loop = IO::Async::Loop->new;
   609      my $future = $loop->new_future;
   610      my $status;
   611
   612      $loop->run_child(
   613          command => [@command],
   614          on_finish => sub {
   615              my ($pid, $exitcode, $stdout, $stderr) = @_;
   616              $status = ($exitcode >> 8);
   617
   618              if ($status) {
   619                  my $message = "Command @command exited with status $status";
   620                  $message .= ": $stderr" if length $stderr;
   621                  $future->fail($message);
   622                  return;
   623              }
   624
   625              $future->done($stdout);
   626          });
   627
   628      $loop->await($future);
   629

Regards,


Reply to: