Loading lib/memdebug.c +32 −1 Original line number Diff line number Diff line Loading @@ -343,7 +343,12 @@ curl_socket_t curl_socket(int domain, int type, int protocol, "FD %s:%d socket() = %ld\n" : "FD %s:%d socket() = %zd\n"; curl_socket_t sockfd = socket(domain, type, protocol); curl_socket_t sockfd; if(countcheck("socket", line, source)) return CURL_SOCKET_BAD; sockfd = socket(domain, type, protocol); if(source && (sockfd != CURL_SOCKET_BAD)) curl_memlog(fmt, source, line, sockfd); Loading @@ -351,6 +356,32 @@ curl_socket_t curl_socket(int domain, int type, int protocol, return sockfd; } ssize_t curl_dosend(int sockfd, const void *buf, size_t len, int flags, int line, const char *source) { ssize_t rc; if(countcheck("send", line, source)) return -1; rc = send(sockfd, buf, len, flags); if(source) curl_memlog("SEND %s:%d send(%zu) = %zd\n", source, line, len, rc); return rc; } ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, int line, const char *source) { ssize_t rc; if(countcheck("recv", line, source)) return -1; rc = recv(sockfd, buf, len, flags); if(source) curl_memlog("RECV %s:%d recv(%zu) = %zd\n", source, line, len, rc); return rc; } #ifdef HAVE_SOCKETPAIR int curl_socketpair(int domain, int type, int protocol, curl_socket_t socket_vector[2], Loading lib/memdebug.h +9 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, 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 @@ -66,6 +66,12 @@ CURL_EXTERN int curl_socketpair(int domain, int type, int protocol, int line, const char *source); #endif /* send/receive sockets */ CURL_EXTERN ssize_t curl_dosend(int sockfd, const void *buf, size_t len, int flags, int line, const char *source); CURL_EXTERN ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, int line, const char *source); /* FILE functions */ CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line, const char *source); Loading @@ -84,6 +90,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #define calloc(nbelem,size) curl_docalloc(nbelem, size, __LINE__, __FILE__) #define realloc(ptr,size) curl_dorealloc(ptr, size, __LINE__, __FILE__) #define free(ptr) curl_dofree(ptr, __LINE__, __FILE__) #define send(a,b,c,d) curl_dosend(a,b,c,d, __LINE__, __FILE__) #define recv(a,b,c,d) curl_dorecv(a,b,c,d, __LINE__, __FILE__) #ifdef WIN32 # ifdef UNICODE Loading lib/openldap.c +2 −2 Original line number Diff line number Diff line Loading @@ -677,7 +677,7 @@ ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_RECV_ERROR; ret = li->recv(conn, FIRSTSOCKET, buf, len, &err); ret = (li->recv)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } Loading @@ -692,7 +692,7 @@ ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_SEND_ERROR; ret = li->send(conn, FIRSTSOCKET, buf, len, &err); ret = (li->send)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } Loading tests/memanalyze.pl +23 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, 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 @@ -33,6 +33,9 @@ my $reallocs=0; my $strdups=0; my $wcsdups=0; my $showlimit; my $sends=0; my $recvs=0; my $sockets=0; while(1) { if($ARGV[0] eq "-v") { Loading Loading @@ -258,6 +261,7 @@ while(<FILE>) { $filedes{$1}=1; $getfile{$1}="$source:$linenum"; $openfile++; $sockets++; # number of socket() calls } elsif($function =~ /socketpair\(\) = (\d*) (\d*)/) { $filedes{$1}=1; Loading Loading @@ -314,6 +318,14 @@ while(<FILE>) { elsif($_ =~ /^GETNAME ([^ ]*):(\d*) (.*)/) { # not much to do } # SEND url.c:1901 send(83) = 83 elsif($_ =~ /^SEND ([^ ]*):(\d*) (.*)/) { $sends++; } # RECV url.c:1901 recv(102400) = 256 elsif($_ =~ /^RECV ([^ ]*):(\d*) (.*)/) { $recvs++; } # ADDR url.c:1282 getaddrinfo() = 0x5ddd elsif($_ =~ /^ADDR ([^ ]*):(\d*) (.*)/) { Loading Loading @@ -403,7 +415,11 @@ if($verbose) { "Strdups: $strdups\n", "Wcsdups: $wcsdups\n", "Frees: $frees\n", "Allocations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups)."\n"; "Sends: $sends\n", "Recvs: $recvs\n", "Sockets: $sockets\n", "Allocations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups)."\n", "Operations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups + $sends + $recvs + $sockets)."\n"; print "Maximum allocated: $maxmem\n"; } tests/runtests.pl +7 −7 Original line number Diff line number Diff line Loading @@ -576,17 +576,17 @@ sub torture { my $count=0; my @out = `$memanalyze -v $memdump`; for(@out) { if(/^Allocations: (\d+)/) { if(/^Operations: (\d+)/) { $count = $1; last; } } if(!$count) { logmsg " found no allocs to make fail\n"; logmsg " found no functions to make fail\n"; return 0; } logmsg " $count allocations to make fail\n"; logmsg " $count functions to make fail\n"; for ( 1 .. $count ) { my $limit = $_; Loading @@ -601,7 +601,7 @@ sub torture { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time()); my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec); logmsg "Fail alloc no: $limit at $now\r"; logmsg "Fail funcion no: $limit at $now\r"; } # make the memory allocation function number $limit return failure Loading @@ -610,7 +610,7 @@ sub torture { # remove memdump first to be sure we get a new nice and clean one unlink($memdump); logmsg "*** Alloc number $limit is now set to fail ***\n" if($gdbthis); logmsg "*** Function number $limit is now set to fail ***\n" if($gdbthis); my $ret = 0; if($gdbthis) { Loading Loading @@ -655,7 +655,7 @@ sub torture { } } if($fail) { logmsg " Failed on alloc number $limit in test.\n", logmsg " Failed on function number $limit in test.\n", " invoke with \"-t$limit\" to repeat this single case.\n"; stopservers($verbose); return 1; Loading Loading @@ -5377,7 +5377,7 @@ Usage: runtests.pl [options] [test selection(s)] -rf full run time statistics -s short output -am automake style output PASS/FAIL: [number] [name] -t[N] torture (simulate memory alloc failures); N means fail Nth alloc -t[N] torture (simulate function failures); N means fail Nth function -v verbose output -vc path use this curl only to verify the existing servers [num] like "5 6 9" or " 5 to 22 " to run those tests only Loading Loading
lib/memdebug.c +32 −1 Original line number Diff line number Diff line Loading @@ -343,7 +343,12 @@ curl_socket_t curl_socket(int domain, int type, int protocol, "FD %s:%d socket() = %ld\n" : "FD %s:%d socket() = %zd\n"; curl_socket_t sockfd = socket(domain, type, protocol); curl_socket_t sockfd; if(countcheck("socket", line, source)) return CURL_SOCKET_BAD; sockfd = socket(domain, type, protocol); if(source && (sockfd != CURL_SOCKET_BAD)) curl_memlog(fmt, source, line, sockfd); Loading @@ -351,6 +356,32 @@ curl_socket_t curl_socket(int domain, int type, int protocol, return sockfd; } ssize_t curl_dosend(int sockfd, const void *buf, size_t len, int flags, int line, const char *source) { ssize_t rc; if(countcheck("send", line, source)) return -1; rc = send(sockfd, buf, len, flags); if(source) curl_memlog("SEND %s:%d send(%zu) = %zd\n", source, line, len, rc); return rc; } ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, int line, const char *source) { ssize_t rc; if(countcheck("recv", line, source)) return -1; rc = recv(sockfd, buf, len, flags); if(source) curl_memlog("RECV %s:%d recv(%zu) = %zd\n", source, line, len, rc); return rc; } #ifdef HAVE_SOCKETPAIR int curl_socketpair(int domain, int type, int protocol, curl_socket_t socket_vector[2], Loading
lib/memdebug.h +9 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, 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 @@ -66,6 +66,12 @@ CURL_EXTERN int curl_socketpair(int domain, int type, int protocol, int line, const char *source); #endif /* send/receive sockets */ CURL_EXTERN ssize_t curl_dosend(int sockfd, const void *buf, size_t len, int flags, int line, const char *source); CURL_EXTERN ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, int line, const char *source); /* FILE functions */ CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line, const char *source); Loading @@ -84,6 +90,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #define calloc(nbelem,size) curl_docalloc(nbelem, size, __LINE__, __FILE__) #define realloc(ptr,size) curl_dorealloc(ptr, size, __LINE__, __FILE__) #define free(ptr) curl_dofree(ptr, __LINE__, __FILE__) #define send(a,b,c,d) curl_dosend(a,b,c,d, __LINE__, __FILE__) #define recv(a,b,c,d) curl_dorecv(a,b,c,d, __LINE__, __FILE__) #ifdef WIN32 # ifdef UNICODE Loading
lib/openldap.c +2 −2 Original line number Diff line number Diff line Loading @@ -677,7 +677,7 @@ ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_RECV_ERROR; ret = li->recv(conn, FIRSTSOCKET, buf, len, &err); ret = (li->recv)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } Loading @@ -692,7 +692,7 @@ ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_SEND_ERROR; ret = li->send(conn, FIRSTSOCKET, buf, len, &err); ret = (li->send)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } Loading
tests/memanalyze.pl +23 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, 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 @@ -33,6 +33,9 @@ my $reallocs=0; my $strdups=0; my $wcsdups=0; my $showlimit; my $sends=0; my $recvs=0; my $sockets=0; while(1) { if($ARGV[0] eq "-v") { Loading Loading @@ -258,6 +261,7 @@ while(<FILE>) { $filedes{$1}=1; $getfile{$1}="$source:$linenum"; $openfile++; $sockets++; # number of socket() calls } elsif($function =~ /socketpair\(\) = (\d*) (\d*)/) { $filedes{$1}=1; Loading Loading @@ -314,6 +318,14 @@ while(<FILE>) { elsif($_ =~ /^GETNAME ([^ ]*):(\d*) (.*)/) { # not much to do } # SEND url.c:1901 send(83) = 83 elsif($_ =~ /^SEND ([^ ]*):(\d*) (.*)/) { $sends++; } # RECV url.c:1901 recv(102400) = 256 elsif($_ =~ /^RECV ([^ ]*):(\d*) (.*)/) { $recvs++; } # ADDR url.c:1282 getaddrinfo() = 0x5ddd elsif($_ =~ /^ADDR ([^ ]*):(\d*) (.*)/) { Loading Loading @@ -403,7 +415,11 @@ if($verbose) { "Strdups: $strdups\n", "Wcsdups: $wcsdups\n", "Frees: $frees\n", "Allocations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups)."\n"; "Sends: $sends\n", "Recvs: $recvs\n", "Sockets: $sockets\n", "Allocations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups)."\n", "Operations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups + $sends + $recvs + $sockets)."\n"; print "Maximum allocated: $maxmem\n"; }
tests/runtests.pl +7 −7 Original line number Diff line number Diff line Loading @@ -576,17 +576,17 @@ sub torture { my $count=0; my @out = `$memanalyze -v $memdump`; for(@out) { if(/^Allocations: (\d+)/) { if(/^Operations: (\d+)/) { $count = $1; last; } } if(!$count) { logmsg " found no allocs to make fail\n"; logmsg " found no functions to make fail\n"; return 0; } logmsg " $count allocations to make fail\n"; logmsg " $count functions to make fail\n"; for ( 1 .. $count ) { my $limit = $_; Loading @@ -601,7 +601,7 @@ sub torture { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time()); my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec); logmsg "Fail alloc no: $limit at $now\r"; logmsg "Fail funcion no: $limit at $now\r"; } # make the memory allocation function number $limit return failure Loading @@ -610,7 +610,7 @@ sub torture { # remove memdump first to be sure we get a new nice and clean one unlink($memdump); logmsg "*** Alloc number $limit is now set to fail ***\n" if($gdbthis); logmsg "*** Function number $limit is now set to fail ***\n" if($gdbthis); my $ret = 0; if($gdbthis) { Loading Loading @@ -655,7 +655,7 @@ sub torture { } } if($fail) { logmsg " Failed on alloc number $limit in test.\n", logmsg " Failed on function number $limit in test.\n", " invoke with \"-t$limit\" to repeat this single case.\n"; stopservers($verbose); return 1; Loading Loading @@ -5377,7 +5377,7 @@ Usage: runtests.pl [options] [test selection(s)] -rf full run time statistics -s short output -am automake style output PASS/FAIL: [number] [name] -t[N] torture (simulate memory alloc failures); N means fail Nth alloc -t[N] torture (simulate function failures); N means fail Nth function -v verbose output -vc path use this curl only to verify the existing servers [num] like "5 6 9" or " 5 to 22 " to run those tests only Loading