Since the NSS lib closes the socket the memory tracking system wrongly gets a
false positive on a leaked socket, so this introduces a way to tell the system that the socket is indeed closed without explicitly closing it!
This commit is contained in:
parent
0d9f14f5c1
commit
6a79b0e859
@ -263,13 +263,19 @@ int curl_accept(int s, void *saddr, void *saddrlen,
|
|||||||
return sockfd;
|
return sockfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* separate function to allow libcurl to mark a "faked" close */
|
||||||
|
int curl_mark_sclose(int sockfd, int line, const char *source)
|
||||||
|
{
|
||||||
|
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 */
|
/* this is our own defined way to close sockets on *ALL* platforms */
|
||||||
int curl_sclose(int sockfd, int line, const char *source)
|
int curl_sclose(int sockfd, int line, const char *source)
|
||||||
{
|
{
|
||||||
int res=sclose(sockfd);
|
int res=sclose(sockfd);
|
||||||
if(logfile)
|
curl_mark_sclose(sockfd, line, source);
|
||||||
fprintf(logfile, "FD %s:%d sclose(%d)\n",
|
|
||||||
source, line, sockfd);
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ CURL_EXTERN void curl_memlimit(long limit);
|
|||||||
|
|
||||||
/* file descriptor manipulators */
|
/* file descriptor manipulators */
|
||||||
CURL_EXTERN int curl_socket(int domain, int type, int protocol, int line , const char *);
|
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_sclose(int sockfd, int, const char *source);
|
||||||
CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen,
|
CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen,
|
||||||
int line, const char *source);
|
int line, const char *source);
|
||||||
@ -117,6 +118,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
|
|||||||
#undef sclose
|
#undef sclose
|
||||||
#define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__)
|
#define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__)
|
||||||
|
|
||||||
|
#define fake_sclose(sockfd) curl_mark_sclose(sockfd,__LINE__,__FILE__)
|
||||||
|
|
||||||
#undef fopen
|
#undef fopen
|
||||||
#define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__)
|
#define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__)
|
||||||
#undef fdopen
|
#undef fdopen
|
||||||
@ -127,3 +130,7 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
|
|||||||
|
|
||||||
#endif /* _CURL_MEMDEBUG_H */
|
#endif /* _CURL_MEMDEBUG_H */
|
||||||
#endif /* CURLDEBUG */
|
#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
|
/* NSS closes the socket we previously handed to it, so we must mark it
|
||||||
as closed to avoid double close */
|
as closed to avoid double close */
|
||||||
|
fake_sclose(conn->sock[sockindex]);
|
||||||
conn->sock[sockindex] = CURL_SOCKET_BAD;
|
conn->sock[sockindex] = CURL_SOCKET_BAD;
|
||||||
if(connssl->client_nickname != NULL) {
|
if(connssl->client_nickname != NULL) {
|
||||||
free(connssl->client_nickname);
|
free(connssl->client_nickname);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user