Bug 26854: Close STDERR when forking stage-marc-import.pl
authorDavid Cook <dcook@prosentient.com.au>
Thu, 29 Oct 2020 04:24:31 +0000 (04:24 +0000)
committerAndrew Fuerste-Henry <andrew@bywatersolutions.com>
Wed, 9 Dec 2020 21:26:49 +0000 (21:26 +0000)
commite5a3989e63e137f0d46dc6513e7e429c49b04f67
tree9bca844d5d5622547e1ef3a9b32c17b8a2a4b9f2
parente967c887fc9bb145fbf93da6e6c527e5760743c2
Bug 26854: Close STDERR when forking stage-marc-import.pl

We need to close STDERR when forking stage-marc-import.pl,
or else the CGI session with Apache httpd does not properly
finish. This leads to unexpected behaviour across different httpd
versions, operating systems, etc.

This patch closes the STDERR file handle when forking a child
process to do MARC imports, and it re-opens STDERR to a log file
in the logdir directory to catch any import errors.

Test plan:
1. Apply the patch
2. Go to http://localhost:8081/cgi-bin/koha/tools/stage-marc-import.pl
3. Upload a MARC file with a large number of records (e.g. 30,000 records)
4. Open F12 dev tools
5. Click on "Network" tab
6. Clear all existing network logs
7. Click "Stage for import"
8. After ~30 seconds, the request to stage-marc-import.pl should return a 200 code
9. Immediately, calls to background-job-progress.pl should start, and the "Job progress"
bar should update at a maximum rate of every .5 seconds
(or more realistically 1-2 seconds)

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
(cherry picked from commit f3cacc62cda58798e8f2de6cfdd636772d2158f0)

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
tools/stage-marc-import.pl