I need some help trying to work out why CGI.pm (guessing at the module)
appears to unlink a temporary file just after opening it and before writing
some uploaded file content to it.
I use <input type=file> in a form which I POST to a modperl Apache server
(version 2.2.14) on Fedora 10.
Intermittently the perl script is unable to access the CGItemp file. Here's
what I have found:
A network/packet trace shows the correct transmission of the HTTP and file
each time.
A Data::Dumper of the CGI variable instance shows the form variable has been
set to a file handle like this
'config_file' => [
$VAR1->{'.tmpfiles'}{'*Fh::fh00013Smartmon_Initial_Config_Export.txt'}{'hndl'}
]
However when the program goes to access the temporary file eg
/usr/tmp/45632, it does not exist.
I started printing the httpd PID in the HTTP output and found that some of
the processes consistently failed and others would consistently work.
I ran an strace on each of the httpd processes (running with 5 children) and
found that the failing processes would unlink the CGItemp file just after
opening it - so this is why it is unavailable to the perl script later on. A
good processes would open the CGItemp file and then start writing to it.
GOOD PROCESS (strace output):
-------------------------------
open("/usr/tmp/CGItemp45478", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 22
ioctl(22, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfcc4e08) = -1 ENOTTY
(Inappropriate ioctl for device)
_llseek(22, 0, [0], SEEK_CUR) = 0
fstat64(22, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fcntl64(22, F_SETFD, FD_CLOEXEC) = 0
write(22, "[MonsvrConfig]\r\nmonsvr_protocol="..., 3464) = 3464
BAD PROCESS (strace output):
-----------------------------
open("/usr/tmp/CGItemp45481", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 21
ioctl(21, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfcc4e08) = -1 ENOTTY
(Inappropriate ioctl for device)
_llseek(21, 0, [0], SEEK_CUR) = 0
fstat64(21, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fcntl64(21, F_SETFD, FD_CLOEXEC) = 0
unlink("/usr/tmp/CGItemp45481") = 0
Why does it get unlinked just after opening and before the uploaded content
can be written to it?
--
View this message in context:
http://old.nabble.com/Intermittent-File-Upload-Failures---CGI-tmpfile-unlinked-tp28078476p28078476.html
Sent from the mod_perl - General mailing list archive at Nabble.com.