Loading tests/ftpserver.pl +27 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms Loading Loading @@ -86,6 +86,7 @@ my $listenaddr = "127.0.0.1"; # just a default my $pidfile = ".ftpd.pid"; # a default, use --pidfile my $SERVERLOGS_LOCK="log/serverlogs.lock"; # server logs advisor read lock my $serverlogslocked=0; do { if($ARGV[0] eq "-v") { Loading Loading @@ -123,7 +124,10 @@ sub catch_zap { my $signame = shift; print STDERR "ftpserver.pl received SIG$signame, exiting\n"; ftpkillslaves(1); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Somebody sent me a SIG$signame"; } $SIG{INT} = \&catch_zap; Loading @@ -149,7 +153,10 @@ sub sysread_or_die { logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Died in sysread_or_die() at $fcaller " . "line $lcaller. ftp$ftpdnum$ext sysread error: $!\n"; } Loading @@ -159,7 +166,10 @@ sub sysread_or_die { logmsg "Error: ftp$ftpdnum$ext read zero\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Died in sysread_or_die() at $fcaller " . "line $lcaller. ftp$ftpdnum$ext read zero\n"; } Loading @@ -181,7 +191,10 @@ sub startsf { logmsg "Failed sockfilt command: $cmd\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Failed to start sockfilt!"; } } Loading Loading @@ -810,6 +823,7 @@ while(1) { logmsg "====> Client connect\n"; set_advisor_read_lock($SERVERLOGS_LOCK); $serverlogslocked = 1; # flush data: $| = 1; Loading Loading @@ -916,12 +930,18 @@ while(1) { } # while(1) logmsg "====> Client disconnected\n"; if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } } print SFWRITE "QUIT\n"; waitpid $sfpid, 0; if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } exit; tests/server/sws.c +21 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ static bool use_ipv6 = FALSE; #endif static const char *ipv_inuse = "IPv4"; static int serverlogslocked = 0; #define REQBUFSIZ 150000 #define REQBUFSIZ_TXT "149999" Loading Loading @@ -1112,6 +1113,11 @@ int main(int argc, char *argv[]) goto sws_cleanup; } /* ** As soon as this server writes its pid file the test harness will ** attempt to connect to this server and initiate its verification. */ wrotepidfile = write_pidfile(pidname); if(!wrotepidfile) goto sws_cleanup; Loading @@ -1128,7 +1134,14 @@ int main(int argc, char *argv[]) break; } /* ** As soon as this server acepts a connection from the test harness it ** must set the server logs advisor read lock to indicate that server ** logs should not be read until this lock is removed by this server. */ set_advisor_read_lock(SERVERLOGS_LOCK); serverlogslocked = 1; #ifdef CURL_SWS_FORK_ENABLED if(use_fork) { Loading Loading @@ -1215,7 +1228,10 @@ int main(int argc, char *argv[]) sclose(msgsock); msgsock = CURL_SOCKET_BAD; if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } if (req.testno == DOCNUMBER_QUIT) break; Loading @@ -1238,7 +1254,10 @@ sws_cleanup: if(wrotepidfile) unlink(pidname); if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } restore_signal_handlers(); Loading tests/server/tftpd.c +14 −3 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ static bool use_ipv6 = FALSE; #endif static const char *ipv_inuse = "IPv4"; static int serverlogslocked = 0; struct testcase { char *buffer; /* holds the file data to send to the client */ Loading Loading @@ -546,6 +547,7 @@ int main(int argc, char **argv) } set_advisor_read_lock(SERVERLOGS_LOCK); serverlogslocked = 1; from.sin_family = AF_INET; Loading Loading @@ -574,13 +576,19 @@ int main(int argc, char **argv) } sclose(peer); if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } logmsg("end of one transfer"); } if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } return result; } Loading Loading @@ -766,7 +774,10 @@ static void timer(int signum) timeout += rexmtval; if(timeout >= maxtimeout) { if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } exit(1); } #ifdef HAVE_SIGSETJMP Loading tests/server/util.c +7 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -260,6 +260,12 @@ void clear_advisor_read_lock(const char *filename) int error = 0; int res; /* ** Log all removal failures. Even those due to file not existing. ** This allows to detect if unexpectedly the file has already been ** removed by a process different than the one that should do this. */ do { res = unlink(filename); } while(res && ((error = ERRNO) == EINTR)); Loading Loading
tests/ftpserver.pl +27 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms Loading Loading @@ -86,6 +86,7 @@ my $listenaddr = "127.0.0.1"; # just a default my $pidfile = ".ftpd.pid"; # a default, use --pidfile my $SERVERLOGS_LOCK="log/serverlogs.lock"; # server logs advisor read lock my $serverlogslocked=0; do { if($ARGV[0] eq "-v") { Loading Loading @@ -123,7 +124,10 @@ sub catch_zap { my $signame = shift; print STDERR "ftpserver.pl received SIG$signame, exiting\n"; ftpkillslaves(1); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Somebody sent me a SIG$signame"; } $SIG{INT} = \&catch_zap; Loading @@ -149,7 +153,10 @@ sub sysread_or_die { logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Died in sysread_or_die() at $fcaller " . "line $lcaller. ftp$ftpdnum$ext sysread error: $!\n"; } Loading @@ -159,7 +166,10 @@ sub sysread_or_die { logmsg "Error: ftp$ftpdnum$ext read zero\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Died in sysread_or_die() at $fcaller " . "line $lcaller. ftp$ftpdnum$ext read zero\n"; } Loading @@ -181,7 +191,10 @@ sub startsf { logmsg "Failed sockfilt command: $cmd\n"; kill(9, $sfpid); waitpid($sfpid, 0); if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } die "Failed to start sockfilt!"; } } Loading Loading @@ -810,6 +823,7 @@ while(1) { logmsg "====> Client connect\n"; set_advisor_read_lock($SERVERLOGS_LOCK); $serverlogslocked = 1; # flush data: $| = 1; Loading Loading @@ -916,12 +930,18 @@ while(1) { } # while(1) logmsg "====> Client disconnected\n"; if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } } print SFWRITE "QUIT\n"; waitpid $sfpid, 0; if($serverlogslocked) { $serverlogslocked = 0; clear_advisor_read_lock($SERVERLOGS_LOCK); } exit;
tests/server/sws.c +21 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ static bool use_ipv6 = FALSE; #endif static const char *ipv_inuse = "IPv4"; static int serverlogslocked = 0; #define REQBUFSIZ 150000 #define REQBUFSIZ_TXT "149999" Loading Loading @@ -1112,6 +1113,11 @@ int main(int argc, char *argv[]) goto sws_cleanup; } /* ** As soon as this server writes its pid file the test harness will ** attempt to connect to this server and initiate its verification. */ wrotepidfile = write_pidfile(pidname); if(!wrotepidfile) goto sws_cleanup; Loading @@ -1128,7 +1134,14 @@ int main(int argc, char *argv[]) break; } /* ** As soon as this server acepts a connection from the test harness it ** must set the server logs advisor read lock to indicate that server ** logs should not be read until this lock is removed by this server. */ set_advisor_read_lock(SERVERLOGS_LOCK); serverlogslocked = 1; #ifdef CURL_SWS_FORK_ENABLED if(use_fork) { Loading Loading @@ -1215,7 +1228,10 @@ int main(int argc, char *argv[]) sclose(msgsock); msgsock = CURL_SOCKET_BAD; if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } if (req.testno == DOCNUMBER_QUIT) break; Loading @@ -1238,7 +1254,10 @@ sws_cleanup: if(wrotepidfile) unlink(pidname); if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } restore_signal_handlers(); Loading
tests/server/tftpd.c +14 −3 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ static bool use_ipv6 = FALSE; #endif static const char *ipv_inuse = "IPv4"; static int serverlogslocked = 0; struct testcase { char *buffer; /* holds the file data to send to the client */ Loading Loading @@ -546,6 +547,7 @@ int main(int argc, char **argv) } set_advisor_read_lock(SERVERLOGS_LOCK); serverlogslocked = 1; from.sin_family = AF_INET; Loading Loading @@ -574,13 +576,19 @@ int main(int argc, char **argv) } sclose(peer); if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } logmsg("end of one transfer"); } if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } return result; } Loading Loading @@ -766,7 +774,10 @@ static void timer(int signum) timeout += rexmtval; if(timeout >= maxtimeout) { if(serverlogslocked) { serverlogslocked = 0; clear_advisor_read_lock(SERVERLOGS_LOCK); } exit(1); } #ifdef HAVE_SIGSETJMP Loading
tests/server/util.c +7 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -260,6 +260,12 @@ void clear_advisor_read_lock(const char *filename) int error = 0; int res; /* ** Log all removal failures. Even those due to file not existing. ** This allows to detect if unexpectedly the file has already been ** removed by a process different than the one that should do this. */ do { res = unlink(filename); } while(res && ((error = ERRNO) == EINTR)); Loading