Hello community,

here is the log from the commit of package perl-Mojo-IOLoop-ReadWriteProcess 
for openSUSE:Factory checked in at 2020-07-05 01:18:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Mojo-IOLoop-ReadWriteProcess (Old)
 and      
/work/SRC/openSUSE:Factory/.perl-Mojo-IOLoop-ReadWriteProcess.new.3060 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Mojo-IOLoop-ReadWriteProcess"

Sun Jul  5 01:18:04 2020 rev:10 rq:818506 version:0.27

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Mojo-IOLoop-ReadWriteProcess/perl-Mojo-IOLoop-ReadWriteProcess.changes
      2020-04-11 23:47:24.683128731 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Mojo-IOLoop-ReadWriteProcess.new.3060/perl-Mojo-IOLoop-ReadWriteProcess.changes
    2020-07-05 01:19:41.733281389 +0200
@@ -1,0 +2,6 @@
+Fri Jul  3 03:11:57 UTC 2020 - Tina Müller <[email protected]>
+
+- updated to 0.27
+   see /usr/share/doc/packages/perl-Mojo-IOLoop-ReadWriteProcess/Changes
+
+-------------------------------------------------------------------

Old:
----
  Mojo-IOLoop-ReadWriteProcess-0.25.tar.gz

New:
----
  Mojo-IOLoop-ReadWriteProcess-0.27.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Mojo-IOLoop-ReadWriteProcess.spec ++++++
--- /var/tmp/diff_new_pack.144Z2O/_old  2020-07-05 01:19:43.561286996 +0200
+++ /var/tmp/diff_new_pack.144Z2O/_new  2020-07-05 01:19:43.565287009 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Mojo-IOLoop-ReadWriteProcess
 #
-# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,14 @@
 
 
 Name:           perl-Mojo-IOLoop-ReadWriteProcess
-Version:        0.25
+Version:        0.27
 Release:        0
 %define cpan_name Mojo-IOLoop-ReadWriteProcess
 Summary:        Execute external programs or internal code blocks as separate 
process
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Group:          Development/Libraries/Perl
-Url:            https://metacpan.org/release/%{cpan_name}
-Source0:        
https://cpan.metacpan.org/authors/id/M/MU/MUDLER/%{cpan_name}-%{version}.tar.gz
+URL:            https://metacpan.org/release/%{cpan_name}
+Source0:        
https://cpan.metacpan.org/authors/id/S/SZ/SZARATE/%{cpan_name}-%{version}.tar.gz
 Source1:        cpanspec.yml
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ Mojo-IOLoop-ReadWriteProcess-0.25.tar.gz -> 
Mojo-IOLoop-ReadWriteProcess-0.27.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/Changes 
new/Mojo-IOLoop-ReadWriteProcess-0.27/Changes
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/Changes       2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/Changes       2020-07-03 
02:27:21.000000000 +0200
@@ -1,5 +1,15 @@
+
 Revision history for Perl extension Mojo-IOLoop-ReadWriteProcess
 
+0.27 2020-07-03T00:25:15Z
+  - Fix CircleCI build
+  - Fix perl required version
+
+0.26 2020-07-02T18:21:18Z
+  - Apply tools/tidy with Perl::Tidy 20200110
+  - Allow stopping the entire process group of the process
+  - Change minimum perl to 5.16   
+
 0.25 2020-04-08T14:48:01Z
    - In "stop" sleep only after sending the first signal to speedup 
termination by okurz
    - Various fixups in test suite
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/MANIFEST 
new/Mojo-IOLoop-ReadWriteProcess-0.27/MANIFEST
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/MANIFEST      2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/MANIFEST      2020-07-03 
02:27:21.000000000 +0200
@@ -51,6 +51,7 @@
 t/12_mocked_container.t
 t/13_shared.t
 t/data/process_check.sh
+t/data/simple_fork.pl
 t/data/subreaper/child.sh
 t/data/subreaper/dead_child.sh
 t/data/subreaper/dead_master.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/META.json 
new/Mojo-IOLoop-ReadWriteProcess-0.27/META.json
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/META.json     2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/META.json     2020-07-03 
02:27:21.000000000 +0200
@@ -4,7 +4,7 @@
       "Ettore Di Giacinto <[email protected]>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Minilla/v3.1.2",
+   "generated_by" : "Minilla/v3.1.10",
    "license" : [
       "perl_5"
    ],
@@ -29,14 +29,14 @@
       "configure" : {
          "requires" : {
             "Module::Build" : "0.4005",
-            "perl" : "5.008_001"
+            "perl" : "5.016"
          }
       },
       "develop" : {
          "requires" : {
             "Test::CPAN::Meta" : "0",
             "Test::MinimumVersion::Fast" : "0.04",
-            "Test::PAUSE::Permissions" : "0.04",
+            "Test::PAUSE::Permissions" : "0.07",
             "Test::Pod" : "1.41",
             "Test::Spellunker" : "v0.2.7"
          }
@@ -56,7 +56,7 @@
    "provides" : {
       "Mojo::IOLoop::ReadWriteProcess" : {
          "file" : "lib/Mojo/IOLoop/ReadWriteProcess.pm",
-         "version" : "0.25"
+         "version" : "0.27"
       },
       "Mojo::IOLoop::ReadWriteProcess::CGroup" : {
          "file" : "lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm"
@@ -148,16 +148,17 @@
          "web" : "https://github.com/mudler/Mojo-IOLoop-ReadWriteProcess";
       }
    },
-   "version" : "0.25",
+   "version" : "0.27",
    "x_contributors" : [
       "Clemens Famulla-Conrad <[email protected]>",
       "Ettore Di Giacinto <[email protected]>",
       "Ettore Di Giacinto <[email protected]>",
+      "Marius Kittler <[email protected]>",
       "Mohammad S Anwar <[email protected]>",
       "Oliver Kurz <[email protected]>",
       "Santiago Zarate <[email protected]>",
+      "Santiago Zarate <[email protected]>",
       "Sebastian Riedel <[email protected]>"
    ],
-   "x_serialization_backend" : "JSON::PP version 2.97001",
    "x_static_install" : 0
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/META.yml 
new/Mojo-IOLoop-ReadWriteProcess-0.27/META.yml
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/META.yml      2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/META.yml      2020-07-03 
02:27:21.000000000 +0200
@@ -6,9 +6,9 @@
   Test::More: '0.98'
 configure_requires:
   Module::Build: '0.4005'
-  perl: 5.008_001
+  perl: '5.016'
 dynamic_config: 0
-generated_by: 'Minilla/v3.1.2, CPAN::Meta::Converter version 2.150010'
+generated_by: 'Minilla/v3.1.10, CPAN::Meta::Converter version 2.143240'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,7 +27,7 @@
 provides:
   Mojo::IOLoop::ReadWriteProcess:
     file: lib/Mojo/IOLoop/ReadWriteProcess.pm
-    version: '0.25'
+    version: '0.27'
   Mojo::IOLoop::ReadWriteProcess::CGroup:
     file: lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm
   Mojo::IOLoop::ReadWriteProcess::CGroup::v1:
@@ -87,14 +87,15 @@
   bugtracker: https://github.com/mudler/Mojo-IOLoop-ReadWriteProcess/issues
   homepage: https://github.com/mudler/Mojo-IOLoop-ReadWriteProcess
   repository: git://github.com/mudler/Mojo-IOLoop-ReadWriteProcess.git
-version: '0.25'
+version: '0.27'
 x_contributors:
   - 'Clemens Famulla-Conrad <[email protected]>'
   - 'Ettore Di Giacinto <[email protected]>'
   - 'Ettore Di Giacinto <[email protected]>'
+  - 'Marius Kittler <[email protected]>'
   - 'Mohammad S Anwar <[email protected]>'
   - 'Oliver Kurz <[email protected]>'
   - 'Santiago Zarate <[email protected]>'
+  - 'Santiago Zarate <[email protected]>'
   - 'Sebastian Riedel <[email protected]>'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
 x_static_install: 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/README.md 
new/Mojo-IOLoop-ReadWriteProcess-0.27/README.md
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/README.md     2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/README.md     2020-07-03 
02:27:21.000000000 +0200
@@ -53,7 +53,7 @@
 
 # EVENTS
 
-[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess)
 inherits all events from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo::EventEmitter) and can emit
+[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess)
 inherits all events from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo%3A%3AEventEmitter) and can 
emit
 the following new ones.
 
 ## start
@@ -134,7 +134,7 @@
 
 # ATTRIBUTES
 
-[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess)
 inherits all attributes from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo::EventEmitter) and implements
+[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess)
 inherits all attributes from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo%3A%3AEventEmitter) and 
implements
 the following new ones.
 
 ## execute
@@ -203,7 +203,7 @@
     my $session = $process->session;
     $session->enable_subreaper;
 
-Returns the current 
[Mojo::IOLoop::ReadWriteProcess::Session](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess::Session)
 singleton.
+Returns the current 
[Mojo::IOLoop::ReadWriteProcess::Session](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess%3A%3ASession)
 singleton.
 
 ## subreaper
 
@@ -224,7 +224,7 @@
     my $loop    = $process->ioloop;
     $subprocess = $process->ioloop(Mojo::IOLoop->new);
 
-Event loop object to control, defaults to the global 
[Mojo::IOLoop](https://metacpan.org/pod/Mojo::IOLoop) singleton.
+Event loop object to control, defaults to the global 
[Mojo::IOLoop](https://metacpan.org/pod/Mojo%3A%3AIOLoop) singleton.
 
 ## max\_kill\_attempts
 
@@ -239,6 +239,20 @@
 It can be used with blocking\_stop, so if the number of attempts are exhausted,
 a SIGKILL and waitpid will be tried at the end.
 
+## kill\_whole\_group
+
+    use Mojo::IOLoop::ReadWriteProcess;
+    my $process = Mojo::IOLoop::ReadWriteProcess->new(code => sub { setpgrp(0, 
0); exec(...); }, kill_whole_group => 1 );
+    $process->start();
+    $process->send_signal(...); # Will skip the usual check whether 
$process->pid is running
+    $process->stop();           # Kills the entire process group and waits for 
all processes in the group to finish
+
+Defaults to `0`, whether to send signals (e.g. to stop) to the entire process 
group.
+
+This is useful when the sub process creates further sub processes and creates 
a new process
+group as shown in the example. In this case it might be useful to take care of 
the entire process
+group when stopping and wait for every process in the group to finish.
+
 ## collect\_status
 
 Defaults to `1`, If enabled it will automatically collect the status of the 
children process.
@@ -278,12 +292,12 @@
 
 ## error
 
-Returns a [Mojo::Collection](https://metacpan.org/pod/Mojo::Collection) of 
errors.
+Returns a [Mojo::Collection](https://metacpan.org/pod/Mojo%3A%3ACollection) of 
errors.
 Note: errors that can be captured only at the end of the process
 
 # METHODS
 
-[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess)
 inherits all methods from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo::EventEmitter) and implements
+[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess)
 inherits all methods from 
[Mojo::EventEmitter](https://metacpan.org/pod/Mojo%3A%3AEventEmitter) and 
implements
 the following new ones.
 
 ## start()
@@ -418,7 +432,7 @@
 
     Mojo::IOLoop->singleton->start() unless 
Mojo::IOLoop->singleton->is_running;
 
-Returns a 
[Mojo::IOLoop::Stream](https://metacpan.org/pod/Mojo::IOLoop::Stream) object 
and demand the wait operation to 
[Mojo::IOLoop](https://metacpan.org/pod/Mojo::IOLoop).
+Returns a 
[Mojo::IOLoop::Stream](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AStream) 
object and demand the wait operation to 
[Mojo::IOLoop](https://metacpan.org/pod/Mojo%3A%3AIOLoop).
 It needs `set_pipes` enabled. Default IOLoop can be overridden in `ioloop()`.
 
 ## wait()
@@ -578,9 +592,9 @@
     $pool->on( stop => sub { print "Process: ".(+shift()->pid)." finished"; } 
);
     $pool->stop();
 
-Returns a 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess::Pool)
 object that represent a group of processes.
+Returns a 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess%3A%3APool)
 object that represent a group of processes.
 
-It accepts the same arguments as 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess),
 and the last one represent the number of processes to generate.
+It accepts the same arguments as 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess),
 and the last one represent the number of processes to generate.
 
 ## batch()
 
@@ -589,8 +603,8 @@
     $pool->add(sub { print "Hello\n" });
     $pool->on(stop => sub { shift->_diag("Done!") })->start->wait_stop;
 
-Returns a 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess::Pool)
 object generated from supplied arguments.
-It accepts as input the same parameter of 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess::Pool)
 constructor ( see parallel() ).
+Returns a 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess%3A%3APool)
 object generated from supplied arguments.
+It accepts as input the same parameter of 
[Mojo::IOLoop::ReadWriteProcess::Pool](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess%3A%3APool)
 constructor ( see parallel() ).
 
 ## process()
 
@@ -602,9 +616,9 @@
 
     process(sub { print "Hello\n" })->start->wait_stop;
 
-Returns a 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess)
 object that represent a process.
+Returns a 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess)
 object that represent a process.
 
-It accepts the same arguments as 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess).
+It accepts the same arguments as 
[Mojo::IOLoop::ReadWriteProcess](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess).
 
 ## queue()
 
@@ -613,7 +627,7 @@
     $q->add(sub { return 42 } );
     $q->consume;
 
-Returns a 
[Mojo::IOLoop::ReadWriteProcess::Queue](https://metacpan.org/pod/Mojo::IOLoop::ReadWriteProcess::Queue)
 object that represent a queue.
+Returns a 
[Mojo::IOLoop::ReadWriteProcess::Queue](https://metacpan.org/pod/Mojo%3A%3AIOLoop%3A%3AReadWriteProcess%3A%3AQueue)
 object that represent a queue.
 
 # DEBUGGING
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/circle.yml 
new/Mojo-IOLoop-ReadWriteProcess-0.27/circle.yml
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/circle.yml    2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/circle.yml    2020-07-03 
02:27:21.000000000 +0200
@@ -1,19 +1,24 @@
-machine:
-  environment:
-    PATH: ~/perl5/bin:$PATH
-
-dependencies:
-  pre:
-    - curl -L https://cpanmin.us | perl - App::cpanminus
-    - cpanm --local-lib=~/perl5 local::lib && echo "eval $(perl -I 
~/perl5/lib/perl5/ -Mlocal::lib)" >> ~/.bashrc
-    - cpanm --quiet --notest --skip-satisfied Devel::Cover 
Devel::Cover::Report::Codecov
-    - cpanm --installdeps .
-
-test:
-  override:
-    - perl Build.PL
-    - ./Build build
-    - cover -test
-
-  post:
-    - cover -report codecov
+version: 2.1
+orbs:
+  perl: circleci/[email protected]
+workflows:
+  main:
+    jobs:
+      - perl/build:
+          codecov: true
+          save-to-artifacts: true
+          save-to-workspace: true
+      - perl/test-linux:
+          matrix:
+            parameters:
+              perl-version:
+                - '5.16'
+                - '5.18'
+                - '5.20'
+                - '5.22'
+                - '5.24'
+                - '5.26'
+                - '5.28'
+                - '5.30'
+          requires:
+            - perl/build
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/cpanfile 
new/Mojo-IOLoop-ReadWriteProcess-0.27/cpanfile
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/cpanfile      2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/cpanfile      2020-07-03 
02:27:21.000000000 +0200
@@ -3,7 +3,7 @@
 
 on configure => sub {
     requires 'Module::Build';
-    requires 'perl', '5.008_001';
+    requires 'perl', '5.016';
 };
 
 on test => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Freezer.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Freezer.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Freezer.pm
 2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Freezer.pm
 2020-07-03 02:27:21.000000000 +0200
@@ -10,7 +10,7 @@
 
 has cgroup => sub { Mojo::IOLoop::ReadWriteProcess::CGroup::v1->new };
 
-sub state { shift->cgroup->_setget(STATE_INTERFACE, @_) }
+sub state           { shift->cgroup->_setget(STATE_INTERFACE, @_) }
 sub self_freezing   { shift->cgroup->_list(SELF_FREEZING_INTERFACE) }
 sub parent_freezing { shift->cgroup->_list(PARENT_FREEZING_INTERFACE) }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Memory.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Memory.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Memory.pm
  2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Memory.pm
  2020-07-03 02:27:21.000000000 +0200
@@ -99,10 +99,10 @@
 sub move_charge {
   shift->cgroup->_setget(MOVE_CHARGE_AT_IMMIGRATE_INTERFACE, @_);
 }
-sub oom_control { shift->cgroup->_setget(OOM_CONTROL_INTERFACE, @_) }
-sub numa_stat   { shift->cgroup->_list(NUMA_STAT_INTERFACE) }
-sub kmem_limit  { shift->cgroup->_setget(KMEM_LIMIT_INTERFACE,  @_) }
-sub kmem_usage  { shift->cgroup->_list(KMEM_USAGE_INTERFACE) }
+sub oom_control        { shift->cgroup->_setget(OOM_CONTROL_INTERFACE, @_) }
+sub numa_stat          { shift->cgroup->_list(NUMA_STAT_INTERFACE) }
+sub kmem_limit         { shift->cgroup->_setget(KMEM_LIMIT_INTERFACE, @_) }
+sub kmem_usage         { shift->cgroup->_list(KMEM_USAGE_INTERFACE) }
 sub kmem_failcnt       { shift->cgroup->_list(KMEM_FAILCNT_INTERFACE) }
 sub kmem_max_usage     { shift->cgroup->_list(KMEM_MAX_RECORDED_INTERFACE) }
 sub kmem_tcp_limit     { shift->cgroup->_setget(KMEM_TCP_LIMIT_INTERFACE, @_) }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Netprio.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Netprio.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Netprio.pm
 2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/Netprio.pm
 2020-07-03 02:27:21.000000000 +0200
@@ -11,7 +11,7 @@
 has cgroup => sub { Mojo::IOLoop::ReadWriteProcess::CGroup::v1->new };
 
 sub ifpriomap { shift->cgroup->_setget(IFPRIOMAP_INTERFACE, @_) }
-sub prioidx { shift->cgroup->_list(PRIOIDX_INTERFACE) }
+sub prioidx   { shift->cgroup->_list(PRIOIDX_INTERFACE) }
 
 1;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/PID.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/PID.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/PID.pm
     2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1/PID.pm
     2020-07-03 02:27:21.000000000 +0200
@@ -7,7 +7,7 @@
 has cgroup => sub { Mojo::IOLoop::ReadWriteProcess::CGroup::v2->new };
 
 sub current { shift->cgroup->_list(CURRENT_INTERFACE) }
-sub max { shift->cgroup->_setget(MAX_INTERFACE, @_) }
+sub max     { shift->cgroup->_setget(MAX_INTERFACE, @_) }
 
 1;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1.pm
 2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v1.pm
 2020-07-03 02:27:21.000000000 +0200
@@ -27,9 +27,14 @@
 has controller => '';
 
 sub _cgroup {
-  path($_[0]->parent
-    ?
-      path($_[0]->_vfs, $_[0]->controller // '', $_[0]->name // '', 
$_[0]->parent)
+  path(
+    $_[0]->parent
+    ? path(
+      $_[0]->_vfs,
+      $_[0]->controller // '',
+      $_[0]->name       // '',
+      $_[0]->parent
+      )
     : path($_[0]->_vfs, $_[0]->controller // '', $_[0]->name // ''));
 }
 
@@ -44,7 +49,7 @@
   my ($self, $string) = @_;
   my $g = $self->_vfs;
   $string =~ s/$g//;
-  my @p = splitdir($string);
+  my @p   = splitdir($string);
   my $pre = substr $string, 0, 1;
   shift @p if $pre eq '/';
   my $controller = shift @p;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/PID.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/PID.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/PID.pm
     2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/PID.pm
     2020-07-03 02:27:21.000000000 +0200
@@ -7,7 +7,7 @@
 has cgroup => sub { Mojo::IOLoop::ReadWriteProcess::CGroup::v2->new };
 
 sub current { shift->cgroup->_list(CURRENT_INTERFACE) }
-sub max { shift->cgroup->_setget(MAX_INTERFACE, @_) }
+sub max     { shift->cgroup->_setget(MAX_INTERFACE, @_) }
 
 1;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/RDMA.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/RDMA.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/RDMA.pm
    2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup/v2/RDMA.pm
    2020-07-03 02:27:21.000000000 +0200
@@ -8,7 +8,7 @@
 has cgroup => sub { Mojo::IOLoop::ReadWriteProcess::CGroup::v2->new };
 
 sub current { shift->cgroup->_list(CURRENT_INTERFACE) }
-sub max { shift->cgroup->_setget(MAX_INTERFACE, @_) }
+sub max     { shift->cgroup->_setget(MAX_INTERFACE, @_) }
 
 1;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm
    2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/CGroup.pm
    2020-07-03 02:27:21.000000000 +0200
@@ -24,7 +24,7 @@
   my ($self, $string) = @_;
   my $g = $self->_vfs;
   $string =~ s/$g//;
-  my @p = splitdir($string);
+  my @p   = splitdir($string);
   my $pre = substr $string, 0, 1;
   shift @p if $pre eq '/';
   my $name = shift @p;
@@ -32,8 +32,8 @@
 }
 
 sub _cgroup {
-  path($_[0]->parent ?
-      path($_[0]->_vfs, $_[0]->name // '', $_[0]->parent)
+  path($_[0]->parent
+    ? path($_[0]->_vfs, $_[0]->name // '', $_[0]->parent)
     : path($_[0]->_vfs, $_[0]->name // ''));
 }
 
@@ -60,8 +60,8 @@
   print $h ($f == 0 ? 0 : 1);
 }
 
-sub _appendln { shift->_append(shift() => pop() . "\n") }
-sub _list { my $c = shift->_cgroup->child(pop); $c->slurp if -e $c }
+sub _appendln  { shift->_append(shift() => pop() . "\n") }
+sub _list      { my $c = shift->_cgroup->child(pop); $c->slurp if -e $c }
 sub _listarray { split(/\n/, shift->_list(@_)) }
 
 sub _contains {
@@ -71,8 +71,8 @@
 }
 
 sub _setget {
-  $_[2] ?
-    shift->_cgroup->child($_[0])->spurt($_[1])
+  $_[2]
+    ? shift->_cgroup->child($_[0])->spurt($_[1])
     : shift->_cgroup->child($_[0])->slurp;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Container.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Container.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Container.pm
 2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Container.pm
 2020-07-03 02:27:21.000000000 +0200
@@ -109,7 +109,7 @@
           set_pipes      => 0,
           internal_pipes => 1,
           code           => sub {
-            $_[0]->enable_subreaper if $self->subreaper;
+            $_[0]->enable_subreaper     if $self->subreaper;
             $self->namespace->isolate() if $self->unshare & CLONE_NEWNS;
             $fn->(@_);
           });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Namespace.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Namespace.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Namespace.pm
 2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Namespace.pm
 2020-07-03 02:27:21.000000000 +0200
@@ -41,8 +41,7 @@
   my $prctl_call
     = $machine
     =~ 
/^i[3456]86|^blackfin|cris|frv|h8300|m32r|m68k|microblaze|mn10300|sh|parisc$/
-    ?
-    310
+    ? 310
     : $machine eq "s390" ? 303
 
     : $machine eq "x86_64" ? 272
@@ -109,7 +108,7 @@
     0);
 
   warn "mount is unavailable on this platform." if $!{EINVAL};
-  warn "Mount failed! $!" if $!;
+  warn "Mount failed! $!"                       if $!;
   return $ret;
 }
 
@@ -119,7 +118,7 @@
   my $ret = syscall(_get_unshare_syscall(), $opts, 0, 0);
 
   warn "unshare is unavailable on this platform." if $!{EINVAL};
-  warn "Unshare failed! $!" if $!;
+  warn "Unshare failed! $!"                       if $!;
   return $ret;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Queue.pm 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Queue.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Queue.pm 
    2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Queue.pm 
    2020-07-03 02:27:21.000000000 +0200
@@ -57,8 +57,7 @@
   return (
     eval { $self->pool->Mojo::IOLoop::ReadWriteProcess::Pool::_cmd(@_, $fn) },
     (grep(/once|on|emit/, $fn))
-    ?
-      eval { $self->queue->Mojo::IOLoop::ReadWriteProcess::Pool::_cmd(@_, $fn) 
}
+    ? eval { $self->queue->Mojo::IOLoop::ReadWriteProcess::Pool::_cmd(@_, $fn) 
}
     : ());
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Session.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Session.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Session.pm
   2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Session.pm
   2020-07-03 02:27:21.000000000 +0200
@@ -53,7 +53,7 @@
         while ((my $pid = waitpid(-1, WNOHANG)) > 0) {
           $singleton->collect($pid => $? => $!);
         }
-        }
+      }
     });
 }
 
@@ -91,8 +91,8 @@
 sub _resolve {
   my ($el, $w) = (pop, pop);
   return
-    exists $singleton->{$w}->{$el} ?
-    $w eq 'orphans'
+      exists $singleton->{$w}->{$el}
+    ? $w eq 'orphans'
       ? $singleton->{$w}->{$el}
       : ${$singleton->{$w}->{$el}}
     : undef;
@@ -149,18 +149,18 @@
     = $machine
     =~ 
/^i[3456]86|^blackfin|cris|frv|h8300|m32r|m68k|microblaze|mn10300|sh|s390|parisc$/
     ? 172
-    : $machine eq "x86_64"  ? 157
-    : $machine eq "sparc64" ? 147
-    : $machine eq "aarch64" ? 167
+    : $machine eq "x86_64"                         ? 157
+    : $machine eq "sparc64"                        ? 147
+    : $machine eq "aarch64"                        ? 167
     : ($machine eq "ppc" || $machine eq "ppc64le") ? 171
-    : $machine eq "ia64"   ? 1170
-    : $machine eq "alpha"  ? 348
-    : $machine eq "arm"    ? 0x900000 + 172
-    : $machine eq "avr32"  ? 148
-    : $machine eq "mips"   ? 4000 + 192
-    : $machine eq "mips64" ? 5000 + 153
-    : $machine eq "xtensa" ? 130
-    :                        undef;
+    : $machine eq "ia64"                           ? 1170
+    : $machine eq "alpha"                          ? 348
+    : $machine eq "arm"                            ? 0x900000 + 172
+    : $machine eq "avr32"                          ? 148
+    : $machine eq "mips"                           ? 4000 + 192
+    : $machine eq "mips64"                         ? 5000 + 153
+    : $machine eq "xtensa"                         ? 130
+    :                                                undef;
 
   unless (defined $prctl_call) {
     delete @INC{
@@ -188,7 +188,7 @@
     ($arg5 or 0));
 
   warn "prctl($option) is unavailable on this platform." if $!{EINVAL};
-  warn "Error! $!" if $!;
+  warn "Error! $!"                                       if $!;
   return $ret;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Lock.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Lock.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Lock.pm
       2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Lock.pm
       2020-07-03 02:27:21.000000000 +0200
@@ -19,7 +19,7 @@
   warn "[debug:$$] Attempt to acquire lock " . $self->key if DEBUG;
   my $r = @_ > 0 ? $self->acquire(@_) : $self->acquire(wait => 1, undo => 0);
   warn "[debug:$$] lock Returned : $r" if DEBUG;
-  $self->locked(1) if defined $r && $r == 1;
+  $self->locked(1)                     if defined $r && $r == 1;
   return $r;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Memory.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Memory.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Memory.pm
     2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Memory.pm
     2020-07-03 02:27:21.000000000 +0200
@@ -19,7 +19,7 @@
 has flags      => S_IRWXU() | S_IRWXG() | IPC_CREAT();
 has lock_flags => IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
   | S_IROTH | S_IWOTH;
-has _size => 10 * 1024;
+has _size          => 10 * 1024;
 has _shared_memory => sub { $_[0]->_newmem() };
 has _shared_size =>
   sub { $_[0]->_newmem((2 * shift->key) - 1, $Config{intsize}) };
@@ -59,7 +59,7 @@
 
 sub _readsize {
   my $self = shift;
-  my $s = $self->_shared_size()->read(0, $Config{intsize});
+  my $s    = $self->_shared_size()->read(0, $Config{intsize});
   return unpack('I', $s);
 }
 
@@ -132,7 +132,7 @@
   warn "[debug:$$] Error Saving data : $@" if $@ && DEBUG;
 
   $_[0]->_shared_memory->detach() if $_[0]->_shared_memory;
-  return if $@;
+  return                          if $@;
   return 1;
 }
 
@@ -159,7 +159,7 @@
   };
 
   warn "[debug:$$] Error Loading data : $@" if $@ && DEBUG;
-  return if $@;
+  return                                    if $@;
   return 1;
 }
 
@@ -191,7 +191,7 @@
   shift->_lock->unlock(@_);
 }
 
-sub lock { my $s = shift; my $r = $s->_lock->lock(@_); $s->load; $r }
+sub lock     { my $s = shift; my $r = $s->_lock->lock(@_); $s->load; $r }
 sub try_lock { $_[0]->_lock->try_lock() }
 
 sub lock_section {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Semaphore.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Semaphore.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Semaphore.pm
  2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess/Shared/Semaphore.pm
  2020-07-03 02:27:21.000000000 +0200
@@ -54,7 +54,7 @@
   if ($args{'wait'}) {
     my $ncnt = $self->getncnt($args{'sem'});
     return if ($args{'max'} >= 0 && $ncnt >= $args{'max'});
-    warn "[debug:$$] Semaphore wait" if DEBUG;
+    warn "[debug:$$] Semaphore wait"                             if DEBUG;
     warn "[debug:$$] Semaphore val " . $self->getval($args{sem}) if DEBUG;
 
     # Remove NOWAIT and block
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess.pm 
new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess.pm
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/lib/Mojo/IOLoop/ReadWriteProcess.pm   
2020-04-08 16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/lib/Mojo/IOLoop/ReadWriteProcess.pm   
2020-07-03 02:27:21.000000000 +0200
@@ -1,6 +1,6 @@
 package Mojo::IOLoop::ReadWriteProcess;
 
-our $VERSION = '0.25';
+our $VERSION = '0.27';
 
 use Mojo::Base 'Mojo::EventEmitter';
 use Mojo::File 'path';
@@ -22,6 +22,7 @@
 use IO::Pipe;
 use IO::Select;
 use IPC::Open3;
+use Time::HiRes 'sleep';
 use Symbol 'gensym';
 use Storable;
 use POSIX qw( :sys_wait_h :signal_h );
@@ -37,7 +38,7 @@
   qw(internal_pipes channels)
 ] => 1;
 
-has [qw(blocking_stop serialize quirkiness)] => 0;
+has [qw(blocking_stop serialize quirkiness total_sleeptime_during_kill)] => 0;
 
 has [
   qw(execute code process_id pidfile return_status),
@@ -46,6 +47,7 @@
 ];
 
 has max_kill_attempts => 5;
+has kill_whole_group  => 0;
 
 has args  => sub { [] };
 has error => sub { Mojo::Collection->new };
@@ -135,8 +137,8 @@
 
   $self->read_stream(IO::Handle->new_from_fd($rdr, "r"));
   $self->write_stream(IO::Handle->new_from_fd($wtr, "w"));
-  $self->error_stream(($self->separate_err) ?
-      IO::Handle->new_from_fd($err, "r")
+  $self->error_stream(($self->separate_err)
+    ? IO::Handle->new_from_fd($err, "r")
     : $self->write_stream);
 
   return $self;
@@ -175,23 +177,23 @@
 
   if ($self->_internal_return) {
     $return_reader
-      = $self->_internal_return->isa("IO::Pipe::End") ?
-      $self->_internal_return
+      = $self->_internal_return->isa("IO::Pipe::End")
+      ? $self->_internal_return
       : $self->_internal_return->reader();
     $self->_new_err('Cannot read from return code pipe') && return
       unless IO::Select->new($return_reader)->can_read(10);
     $rt = $return_reader->getline();
     $self->_diag("Forked code Process Returns: " . ($rt ? $rt : 'nothing'))
       if DEBUG;
-    $self->return_status($self->serialize ?
-        eval { $self->_deserialize->(b64_decode($rt)) }
-      : $rt ? $rt
-      :       ());
+    $self->return_status(
+        $self->serialize ? eval { $self->_deserialize->(b64_decode($rt)) }
+      : $rt              ? $rt
+      :                    ());
   }
   if ($self->_internal_err) {
     $internal_err_reader
-      = $self->_internal_err->isa("IO::Pipe::End") ?
-      $self->_internal_err
+      = $self->_internal_err->isa("IO::Pipe::End")
+      ? $self->_internal_err
       : $self->_internal_err->reader();
     $self->_new_err('Cannot read from errors code pipe') && return
       unless IO::Select->new($internal_err_reader)->can_read(10);
@@ -263,8 +265,8 @@
     if ($self->internal_pipes) {
       if ($self->_internal_err) {
         $internal_err
-          = $self->_internal_err->isa("IO::Pipe::End") ?
-          $self->_internal_err
+          = $self->_internal_err->isa("IO::Pipe::End")
+          ? $self->_internal_err
           : $self->_internal_err->writer();
         $internal_err->autoflush(1);
       }
@@ -272,8 +274,7 @@
       if ($self->_internal_return) {
         $return
           = $self->_internal_return->isa("IO::Pipe::End")
-          ?
-          $self->_internal_return
+          ? $self->_internal_return
           : $self->_internal_return->writer();
         $return->autoflush(1);
       }
@@ -291,8 +292,8 @@
       $stdout = $output_pipe->writer() if $output_pipe;
       $stderr
         = (!$self->separate_err) ? $stdout
-        : $output_err_pipe ? $output_err_pipe->writer()
-        :                    undef;
+        : $output_err_pipe       ? $output_err_pipe->writer()
+        :                          undef;
       $stdin = $input_pipe->reader() if $input_pipe;
       open STDERR, ">&", $stderr
         or !!$internal_err->write($!)
@@ -383,15 +384,15 @@
 }
 
 sub wait_stop { shift->wait->stop }
-sub errored { !!@{shift->error} ? 1 : 0 }
+sub errored   { !!@{shift->error} ? 1 : 0 }
 
 # PPC64: Treat msb on neg (different cpu/perl interpreter version)
 sub _st { my $st = shift >> 8; ($st & 0x80) ? (0x100 - ($st & 0xFF)) : $st }
 
 sub exit_status {
       defined $_[0]->_status && $_[0]->quirkiness ? _st(shift->_status)
-    : defined $_[0]->_status ? shift->_status >> 8
-    :                          undef;
+    : defined $_[0]->_status                      ? shift->_status >> 8
+    :                                               undef;
 }
 
 sub restart {
@@ -465,8 +466,8 @@
   die "Nothing to do" unless !!$self->execute || !!$self->code;
 
   my @args
-    = $self->args ?
-    ref($self->args) eq "ARRAY"
+    = $self->args
+    ? ref($self->args) eq "ARRAY"
       ? @{$self->args}
       : $self->args
     : ();
@@ -490,58 +491,64 @@
 sub send_signal {
   my $self   = shift;
   my $signal = shift // $self->_default_kill_signal;
-  return unless $self->is_running;
-  $self->_diag("Sending signal '$signal' to " . $self->process_id) if DEBUG;
-  kill $signal => $self->process_id;
+  my $pid    = shift // $self->process_id;
+  return unless $self->kill_whole_group || $self->is_running;
+  $self->_diag("Sending signal '$signal' to $pid") if DEBUG;
+  kill $signal => $pid;
   return $self;
 }
 
 sub stop {
   my $self = shift;
 
-  return $self unless defined $self->pid;
-
-  $self->_diag("Stopping " . $self->pid) if DEBUG;
-
+  my $pid = $self->pid;
+  return $self unless defined $pid;
   return $self->_shutdown(1) unless $self->is_running;
+  $self->_diag("Stopping $pid") if DEBUG;
 
   my $ret;
-  my $attempt = 1;
-  until ((defined $ret && $ret == $self->process_id)
-      || !$self->is_running
-      || $attempt > $self->max_kill_attempts)
+  my $attempt      = 1;
+  my $timeout      = $self->total_sleeptime_during_kill // 0;
+  my $sleep_time   = $self->sleeptime_during_kill;
+  my $max_attempts = $self->max_kill_attempts;
+  my $signal       = $self->_default_kill_signal;
+  $pid = -getpgrp($pid) if $self->kill_whole_group;
+  until ((defined $ret && ($ret == $pid || $ret == -1))
+      || ($attempt > $max_attempts && $timeout <= 0))
   {
-    $self->_diag("attempt ($attempt/"
-        . $self->max_kill_attempts
-        . ") to kill process: "
-        . $self->pid)
-      if DEBUG;
+    my $send_signal = $attempt == 1 || $timeout <= 0;
+    $self->_diag(
+      "attempt $attempt/$max_attempts to kill process: $pid, timeout: 
$timeout")
+      if DEBUG && $send_signal;
     $self->session->_protect(
       sub {
         local $?;
-        $self->send_signal();
-        $ret = waitpid($self->process_id, WNOHANG);
-        $self->_status($?) if $ret == $self->process_id;
+        if ($send_signal) {
+          $self->send_signal($signal, $pid);
+          ++$attempt;
+        }
+        $ret = waitpid($pid, WNOHANG);
+        $self->_status($?) if $ret == $pid || $ret == -1;
       });
-    $attempt++;
-    sleep $self->sleeptime_during_kill if $self->sleeptime_during_kill;
+    if ($sleep_time) {
+      sleep $sleep_time;
+      $timeout -= $sleep_time;
+    }
   }
 
   sleep $self->kill_sleeptime if $self->kill_sleeptime;
 
-  if ($self->blocking_stop && $self->is_running) {
-    $self->_diag(
-      "Could not kill process id: " . $self->process_id . ", blocking attempt")
-      if DEBUG;
+  if ($self->blocking_stop) {
+    $self->_diag("Could not kill process id: $pid, blocking attempt") if DEBUG;
     $self->emit('process_stuck');
 
     ### XXX: avoid to protect on blocking.
-    $self->send_signal($self->_default_blocking_signal);
-    $ret = waitpid($self->process_id, 0);
-    $self->_status($?) if $ret == $self->process_id;
+    $self->send_signal($self->_default_blocking_signal, $pid);
+    $ret = waitpid($pid, 0);
+    $self->_status($?) if $ret == $pid || $ret == -1;
   }
-  elsif ($self->is_running) {
-    $self->_diag("Could not kill process id: " . $self->process_id) if DEBUG;
+  else {
+    $self->_diag("Could not kill process id: $pid") if DEBUG;
     $self->_new_err('Could not kill process');
   }
 
@@ -856,6 +863,20 @@
 It can be used with blocking_stop, so if the number of attempts are exhausted,
 a SIGKILL and waitpid will be tried at the end.
 
+=head2 kill_whole_group
+
+    use Mojo::IOLoop::ReadWriteProcess;
+    my $process = Mojo::IOLoop::ReadWriteProcess->new(code => sub { setpgrp(0, 
0); exec(...); }, kill_whole_group => 1 );
+    $process->start();
+    $process->send_signal(...); # Will skip the usual check whether 
$process->pid is running
+    $process->stop();           # Kills the entire process group and waits for 
all processes in the group to finish
+
+Defaults to C<0>, whether to send signals (e.g. to stop) to the entire process 
group.
+
+This is useful when the sub process creates further sub processes and creates 
a new process
+group as shown in the example. In this case it might be useful to take care of 
the entire process
+group when stopping and wait for every process in the group to finish.
+
 =head2 collect_status
 
 Defaults to C<1>, If enabled it will automatically collect the status of the 
children process.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/t/01_run.t 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/01_run.t
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/t/01_run.t    2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/t/01_run.t    2020-07-03 
02:27:21.000000000 +0200
@@ -37,7 +37,10 @@
   like $@, qr/Nothing to do/,
     "Process with no code nor execute command, will fail";
 
-  $p = Mojo::IOLoop::ReadWriteProcess->new();
+  $p = Mojo::IOLoop::ReadWriteProcess->new(
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01
+  );
   eval { $p->_fork(); };
   ok $@, "Error expected";
   like $@, qr/Can't spawn child without code/, "_fork() with no code will 
fail";
@@ -47,7 +50,9 @@
     pipe(PARENT, CHILD);
 
     my $p = Mojo::IOLoop::ReadWriteProcess->new(
-      code => sub {
+      kill_sleeptime        => 0.01,
+      sleeptime_during_kill => 0.01,
+      code                  => sub {
         close(PARENT);
         open STDERR, ">&", \*CHILD or die $!;
         print STDERR "FOOBARFTW\n" while 1;
@@ -67,7 +72,9 @@
   pipe(PARENT, CHILD);
 
   my $p = Mojo::IOLoop::ReadWriteProcess->new(
-    code => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    code                  => sub {
       close(PARENT);
       open STDERR, ">&", \*CHILD or die $!;
       print STDERR "FOOBARFTW\n";
@@ -133,9 +140,12 @@
 "You do not seem to have $test_script_sigtrap. The script is required to run 
the test"
     unless -e $test_script_sigtrap;
   use Mojo::IOLoop::ReadWriteProcess;
-  my $p = Mojo::IOLoop::ReadWriteProcess->new(execute => 
$test_script)->start();
-  is $p->getline, "TEST normal print\n", 'Get right output from stdout';
-  is $p->err_getline, "TEST error print\n", 'Get right output from stderr';
+  my $p = Mojo::IOLoop::ReadWriteProcess->new(
+    sleeptime_during_kill => 0.1,
+    execute               => $test_script
+  )->start();
+  is $p->getline,     "TEST normal print\n", 'Get right output from stdout';
+  is $p->err_getline, "TEST error print\n",  'Get right output from stderr';
   is $p->is_running, 1, 'process is still waiting for our input';
   $p->write("FOOBAR");
   is $p->read, "you entered FOOBAR\n",
@@ -144,13 +154,15 @@
   is $p->is_running, 0, 'process is not running anymore';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    execute => $test_script,
-    args    => [
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    execute               => $test_script,
+    args                  => [
       qw(FOO
         BAZ)
     ])->start();
-  is $p->stdout, "TEST normal print\n", 'Get right output from stdout';
-  is $p->err_getline, "TEST error print\n", 'Get right output from stderr';
+  is $p->stdout,      "TEST normal print\n", 'Get right output from stdout';
+  is $p->err_getline, "TEST error print\n",  'Get right output from stderr';
   is $p->is_running, 1, 'process is still waiting for our input';
   $p->write("FOOBAR");
   is $p->getline, "you entered FOOBAR\n",
@@ -160,10 +172,12 @@
   is $p->getline,     "FOO BAZ\n", 'process received extra arguments';
   is $p->exit_status, 100,         'able to retrieve function return';
 
-  $p = Mojo::IOLoop::ReadWriteProcess->new(execute => $test_script)
-    ->args([qw(FOO BAZ)])->start();
-  is $p->stdout, "TEST normal print\n", 'Get right output from stdout';
-  is $p->err_getline, "TEST error print\n", 'Get right output from stderr';
+  $p = Mojo::IOLoop::ReadWriteProcess->new(
+    sleeptime_during_kill => 0.1,
+    execute               => $test_script
+  )->args([qw(FOO BAZ)])->start();
+  is $p->stdout,      "TEST normal print\n", 'Get right output from stdout';
+  is $p->err_getline, "TEST error print\n",  'Get right output from stderr';
   is $p->is_running, 1, 'process is still waiting for our input';
   $p->write("FOOBAR");
   is $p->getline, "you entered FOOBAR\n",
@@ -174,8 +188,10 @@
   is $p->exit_status, 100,         'able to retrieve function return';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    execute      => $test_script
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    execute               => $test_script
   );
   $p->start();
   is $p->is_running, 1, 'process is still running';
@@ -186,9 +202,11 @@
     'Still able to get stdout output, always in getline()';
 
   my $p2 = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    execute      => $test_script,
-    set_pipes    => 0
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    execute               => $test_script,
+    set_pipes             => 0
   );
   $p2->start();
   is $p2->getline, undef, "pipes are correctly disabled";
@@ -197,17 +215,19 @@
     'take exit status even with set_pipes = 0 (we killed it)';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    verbose           => 1,
-    separate_err      => 0,
-    execute           => $test_script_sigtrap,
-    max_kill_attempts => -4
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    verbose               => 1,
+    separate_err          => 0,
+    execute               => $test_script_sigtrap,
+    max_kill_attempts     => -4,
   );    # ;)
   $p->start();
   $p->stop();
   is $p->is_running, 1, 'process is still running';
   my $err = ${(@{$p->error})[0]};
   my $exp = qr/Could not kill process/;
-  like $err, $exp , 'Error is not empty if process could not be killed';
+  like $err, $exp, 'Error is not empty if process could not be killed';
   $p->max_kill_attempts(50);
   $p->blocking_stop(0);
   $p->stop();
@@ -221,11 +241,13 @@
 
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    verbose           => 1,
-    separate_err      => 0,
-    blocking_stop     => 1,
-    execute           => $test_script,
-    max_kill_attempts => -1              # ;)
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    verbose               => 1,
+    separate_err          => 0,
+    blocking_stop         => 1,
+    execute               => $test_script,
+    max_kill_attempts     => -1              # ;)
   )->start()->stop();
 
   is $p->is_running, 0,
@@ -233,12 +255,14 @@
 
   my $pidfile = tempfile;
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    verbose           => 1,
-    separate_err      => 0,
-    blocking_stop     => 1,
-    execute           => $test_script,
-    max_kill_attempts => -1,             # ;)
-    pidfile           => $pidfile
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    verbose               => 1,
+    separate_err          => 0,
+    blocking_stop         => 1,
+    execute               => $test_script,
+    max_kill_attempts     => -1,             # ;)
+    pidfile               => $pidfile
   )->start();
   my $pid = path($pidfile)->slurp();
   is -e $pidfile, 1, 'Pidfile is there!';
@@ -248,11 +272,13 @@
 
   $pidfile = tempfile;
   $p       = Mojo::IOLoop::ReadWriteProcess->new(
-    verbose           => 1,
-    separate_err      => 0,
-    blocking_stop     => 1,
-    execute           => $test_script,
-    max_kill_attempts => -1,             # ;)
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    verbose               => 1,
+    separate_err          => 0,
+    blocking_stop         => 1,
+    execute               => $test_script,
+    max_kill_attempts     => -1,             # ;)
   )->start();
   $p->write_pidfile($pidfile);
   $pid = path($pidfile)->slurp();
@@ -262,11 +288,13 @@
   is -e $pidfile, undef, 'Pidfile got removed after stop()';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    verbose           => 1,
-    separate_err      => 0,
-    blocking_stop     => 1,
-    execute           => $test_script,
-    max_kill_attempts => -1,             # ;)
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    verbose               => 1,
+    separate_err          => 0,
+    blocking_stop         => 1,
+    execute               => $test_script,
+    max_kill_attempts     => -1,             # ;)
   )->start();
   is $p->write_pidfile(), undef, "No filename given to write_pidfile";
   $p->stop();
@@ -276,7 +304,9 @@
   use Mojo::IOLoop::ReadWriteProcess;
   use IO::Select;
   my $p = Mojo::IOLoop::ReadWriteProcess->new(
-    code => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    code                  => sub {
       my ($self)        = shift;
       my $parent_output = $self->channel_out;
       my $parent_input  = $self->channel_in;
@@ -329,8 +359,10 @@
   is $p->is_running, 0, 'process is not running';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    code         => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    code                  => sub {
       my ($self)        = shift;
       my $parent_output = $self->channel_out;
       my $parent_input  = $self->channel_in;
@@ -345,7 +377,8 @@
   is $p->is_running,    0,   'process is not running';
   is $p->return_status, 256, 'right return code';
 
-  $p = Mojo::IOLoop::ReadWriteProcess->new(sub { die "Fatal error"; });
+  $p = Mojo::IOLoop::ReadWriteProcess->new(sub { die "Fatal error"; },
+    sleeptime_during_kill => 0.1);
   my $event_fired = 0;
   $p->on(
     process_error => sub {
@@ -361,16 +394,24 @@
   like(${(@{$p->error})[0]}, qr/Fatal error/, 'right error');
   is $event_fired, 1, 'error event fired';
 
-  $p = Mojo::IOLoop::ReadWriteProcess->new(sub { return 42 },
-    internal_pipes => 0);
+  $p = Mojo::IOLoop::ReadWriteProcess->new(
+    sub { return 42 },
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    internal_pipes        => 0
+  );
   $p->start();
   $p->wait_stop();
   is $p->is_running, 0, 'process is not running';
   is $p->return_status, undef,
     'process did not return nothing when internal_pipes are disabled';
 
-  $p = Mojo::IOLoop::ReadWriteProcess->new(sub { die "Bah" },
-    internal_pipes => 0);
+  $p = Mojo::IOLoop::ReadWriteProcess->new(
+    sub { die "Bah" },
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    internal_pipes        => 0
+  );
   $p->start();
   $p->wait_stop();
   is $p->is_running, 0, 'process is not running';
@@ -379,9 +420,11 @@
 # XXX: flaky test temporarly skip it. is !!$p->exit_status, 1, 'Exit status is 
there';
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    set_pipes    => 0,
-    code         => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    set_pipes             => 0,
+    code                  => sub {
       print "TEST normal print\n";
       print STDERR "TEST error print\n";
       return "256";
@@ -392,17 +435,21 @@
   is $p->return_status, 256, "grab exit_status even if no pipes are set";
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    set_pipes    => 1,
-    code         => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    set_pipes             => 1,
+    code                  => sub {
       exit 100;
     })->start();
   $p->wait_stop();
   is $p->exit_status, 100, "grab exit_status even if no pipes are set";
 
   $p = Mojo::IOLoop::ReadWriteProcess->new(
-    separate_err => 0,
-    code         => sub {
+    kill_sleeptime        => 0.01,
+    sleeptime_during_kill => 0.01,
+    separate_err          => 0,
+    code                  => sub {
       print STDERR "TEST error print\n" for (1 .. 6);
       my $a = <STDIN>;
     })->start();
@@ -412,7 +459,46 @@
   $p->write("a");
   $p->wait_stop();
   like $p->stderr_all, qr/TEST error print/, 'read all from stderr works';
-  is $p->read_all, '', 'stdout is empty';
+  is $p->read_all,     '',                   'stdout is empty';
+};
+
+subtest stop_whole_process_group_gracefully => sub {
+  my $test_script = "$FindBin::Bin/data/simple_fork.pl";
+  plan skip_all =>
+    "You do not seem to have $test_script which is required to run the test"
+    unless -e $test_script;
+
+  # run the "term_trap.pl" script and its sub processes within its own
+  # process group
+  # notes: - Not using "term_trap.sh" here because bash interferes with the
+  #          process group.
+  #        - Set TOTAL_SLEEPTIME_DURING_KILL to a notable number of seconds
+  #          to check whether the sub processes would actually be granted
+  #          this number of seconds before getting killed. This is not set by
+  #          default to avoid slowing down the CI.
+  my $sub_process = Mojo::IOLoop::ReadWriteProcess->new(
+    kill_sleeptime              => 0.01,
+    sleeptime_during_kill       => 0.01,
+    max_kill_attempts           => 1,
+    separate_err                => 0,
+    blocking_stop               => 1,
+    kill_whole_group            => 1,
+    total_sleeptime_during_kill => $ENV{TOTAL_SLEEPTIME_DURING_KILL} // 0.05,
+    code                        => sub {
+      $SIG{TERM} = 'IGNORE';
+      setpgrp(0, 0);
+      exec(perl => $test_script);
+    })->start();
+
+  # wait until the sub process changes its process group
+  # note: Otherwise it still has the process group of this unit test and 
calling
+  #       stop would also stop the test itself.
+  my $test_gpid       = getpgrp(0);
+  my $sub_process_pid = $sub_process->pid;
+  sleep 0.1 while $test_gpid == getpgrp($sub_process_pid);
+
+  $sub_process->stop();
+  is $sub_process->is_running, 0, 'process is shut down via kill_whole_group';
 };
 
 subtest process_debug => sub {
@@ -425,7 +511,11 @@
     local *STDERR = $handle;
     delete $INC{'Mojo/IOLoop/ReadWriteProcess.pm'};
     eval "no warnings; require Mojo::IOLoop::ReadWriteProcess";    ## no critic
-    Mojo::IOLoop::ReadWriteProcess->new(sub { 1; })->start()->stop();
+    Mojo::IOLoop::ReadWriteProcess->new(
+      code                  => sub { 1; },
+      kill_sleeptime        => 0.01,
+      sleeptime_during_kill => 0.01
+    )->start()->stop();
   }
 
   like $buffer, qr/Fork: \{/,
@@ -439,7 +529,10 @@
     delete $INC{'Mojo/IOLoop/ReadWriteProcess.pm'};
     eval "no warnings; require Mojo::IOLoop::ReadWriteProcess";    ## no critic
     Mojo::IOLoop::ReadWriteProcess->new(
-      execute => "$FindBin::Bin/data/process_check.sh")->start()->stop();
+      execute               => "$FindBin::Bin/data/process_check.sh",
+      kill_sleeptime        => 0.01,
+      sleeptime_during_kill => 0.01,
+    )->start()->stop();
   }
 
   like $buffer, qr/Execute: .*process_check.sh/,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/t/03_func.t 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/03_func.t
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/t/03_func.t   2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/t/03_func.t   2020-07-03 
02:27:21.000000000 +0200
@@ -23,7 +23,7 @@
 subtest write_pidfile => sub {
   use Mojo::File 'tempfile';
   my $pidfile = tempfile;
-  my $p = process(code => sub { exit 0 }, pidfile => $pidfile);
+  my $p       = process(code => sub { exit 0 }, pidfile => $pidfile);
   $p->write_pidfile;
   ok !$pidfile->slurp;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/t/11_containers.t 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/11_containers.t
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/t/11_containers.t     2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/t/11_containers.t     2020-07-03 
02:27:21.000000000 +0200
@@ -136,7 +136,7 @@
 
   my @pids;
   my $fired;
-  $c->session->on(register => sub { push(@pids, shift) });
+  $c->session->on(register  => sub { push(@pids, shift) });
   $c->process->on(collected => sub { $fired++ });
   $c->once(stop => sub { $fired++ });
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojo-IOLoop-ReadWriteProcess-0.25/t/13_shared.t 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/13_shared.t
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/t/13_shared.t 2020-04-08 
16:51:25.000000000 +0200
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/t/13_shared.t 2020-07-03 
02:27:21.000000000 +0200
@@ -51,7 +51,7 @@
     process(
       sub {
         my $sem = semaphore(key => $sem_key);
-        my $e = 1;
+        my $e   = 1;
         if ($sem->acquire({wait => 1, undo => 0})) {
           $e = 0;
           $sem->release();
@@ -150,7 +150,7 @@
 subtest 'concurrent memory read/write' => sub {
   use IPC::SysV 'ftok';
 
-  my $k = ftok($0, 0);
+  my $k   = ftok($0, 0);
   my $mem = shared_memory(key => $k);
   $mem->_lock->remove;
   my $default = shared_memory;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/t/data/simple_fork.pl 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/data/simple_fork.pl
--- old/Mojo-IOLoop-ReadWriteProcess-0.25/t/data/simple_fork.pl 1970-01-01 
01:00:00.000000000 +0100
+++ new/Mojo-IOLoop-ReadWriteProcess-0.27/t/data/simple_fork.pl 2020-07-03 
02:27:21.000000000 +0200
@@ -0,0 +1,15 @@
+use warnings;
+use strict;
+
+my $pid1 = fork();
+if ($pid1 == 0) {
+  print "fork 1\n";
+  sleep 1000;
+}
+my $pid2 = fork();
+if ($pid2 == 0) {
+  print "fork 2\n";
+  sleep 1000;
+}
+waitpid $pid1, 0;
+waitpid $pid2, 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojo-IOLoop-ReadWriteProcess-0.25/t/lib/Mojo/IOLoop/ReadWriteProcess/Test/Utils.pm
 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/lib/Mojo/IOLoop/ReadWriteProcess/Test/Utils.pm
--- 
old/Mojo-IOLoop-ReadWriteProcess-0.25/t/lib/Mojo/IOLoop/ReadWriteProcess/Test/Utils.pm
      2020-04-08 16:51:25.000000000 +0200
+++ 
new/Mojo-IOLoop-ReadWriteProcess-0.27/t/lib/Mojo/IOLoop/ReadWriteProcess/Test/Utils.pm
      2020-07-03 02:27:21.000000000 +0200
@@ -15,7 +15,7 @@
     sleep 1;
     $attempts++;
   }
-  $or->() if $or && !$condition->();
+  $or->()                     if $or && !$condition->();
   warn "Attempts terminated!" if DEBUG;
 }
 


Reply via email to