diff options
-rw-r--r-- | lib/memdebug.c | 12 | ||||
-rw-r--r-- | lib/memdebug.h | 7 | ||||
-rw-r--r-- | lib/nss.c | 1 |
3 files changed, 17 insertions, 3 deletions
diff --git a/lib/memdebug.c b/lib/memdebug.c index 3a0cf7153..ea3eb8559 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -263,13 +263,19 @@ int curl_accept(int s, void *saddr, void *saddrlen, return sockfd; } -/* this is our own defined way to close sockets on *ALL* platforms */ -int curl_sclose(int sockfd, int line, const char *source) +/* separate function to allow libcurl to mark a "faked" close */ +int curl_mark_sclose(int sockfd, int line, const char *source) { - int res=sclose(sockfd); if(logfile) fprintf(logfile, "FD %s:%d sclose(%d)\n", source, line, sockfd); +} + +/* this is our own defined way to close sockets on *ALL* platforms */ +int curl_sclose(int sockfd, int line, const char *source) +{ + int res=sclose(sockfd); + curl_mark_sclose(sockfd, line, source); return res; } diff --git a/lib/memdebug.h b/lib/memdebug.h index 6e7e8d7f2..57e89b1d4 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -57,6 +57,7 @@ CURL_EXTERN void curl_memlimit(long limit); /* file descriptor manipulators */ CURL_EXTERN int curl_socket(int domain, int type, int protocol, int line , const char *); +CURL_EXTERN int curl_mark_sclose(int sockfd, int, const char *source); CURL_EXTERN int curl_sclose(int sockfd, int, const char *source); CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen, int line, const char *source); @@ -117,6 +118,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #undef sclose #define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__) +#define fake_sclose(sockfd) curl_mark_sclose(sockfd,__LINE__,__FILE__) + #undef fopen #define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__) #undef fdopen @@ -127,3 +130,7 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #endif /* _CURL_MEMDEBUG_H */ #endif /* CURLDEBUG */ + +#ifndef fake_sclose +#define fake_sclose(x) +#endif @@ -930,6 +930,7 @@ void Curl_nss_close(struct connectdata *conn, int sockindex) /* NSS closes the socket we previously handed to it, so we must mark it as closed to avoid double close */ + fake_sclose(conn->sock[sockindex]); conn->sock[sockindex] = CURL_SOCKET_BAD; if(connssl->client_nickname != NULL) { free(connssl->client_nickname); |