aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2006-09-10 22:15:32 +0000
committerDaniel Stenberg <daniel@haxx.se>2006-09-10 22:15:32 +0000
commit8240cea628cfcfdd962d1dfa4ae40e27ed2e9bfb (patch)
treec1783e52135113b643ae5699c59f998d568e2918 /lib/url.c
parentf2a33eb372ec958dbb0c5eeeab546eedbaa617c2 (diff)
Jeff Pohlmeyer presented a *multi_socket()-using program that exposed a
problem with it (SIGSEGV-style). It clearly showed that the existing socket-state and state-difference function wasn't good enough so I rewrote it and could then re-run Jeff's program without any crash. The previous version clearly could miss to tell the application when a handle changed from using one socket to using another. While I was at it (as I could use this as a means to track this problem down), I've now added a 'magic' number to the easy handle struct that is inited at curl_easy_init() time and cleared at curl_easy_cleanup() time that we can use internally to detect that an easy handle seems to be fine, or at least not closed or freed (freeing in debug builds fill the area with 0x13 bytes but in normal builds we can of course not assume any particular data in the freed areas).
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/url.c b/lib/url.c
index 7f42474c4..46aee6650 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -214,6 +214,8 @@ CURLcode Curl_close(struct SessionHandle *data)
{
struct Curl_multi *m = data->multi;
+ data->magic = 0; /* force a clear */
+
if(m)
/* This handle is still part of a multi handle, take care of this first
and detach this handle from there. */
@@ -374,6 +376,8 @@ CURLcode Curl_open(struct SessionHandle **curl)
/* this is a very serious error */
return CURLE_OUT_OF_MEMORY;
+ data->magic = CURLEASY_MAGIC_NUMBER;
+
#ifdef USE_ARES
if(ARES_SUCCESS != ares_init(&data->state.areschannel)) {
free(data);