]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
Fix how TFTP connections are treated when re-used, if the SessionHandle has
authorDaniel Stenberg <daniel@haxx.se>
Wed, 14 Nov 2007 22:41:42 +0000 (22:41 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 14 Nov 2007 22:41:42 +0000 (22:41 +0000)
been used for other protocols in between. I found this when test 2004 started
to fail for me!

lib/tftp.c

index acab993348ff6bd0389f2b106ef4df7fcdd1fd0d..8ed71df3bf0b6a511e1a7ae873942d904e8a8f29 100644 (file)
@@ -698,8 +698,7 @@ static CURLcode Curl_tftp_done(struct connectdata *conn, CURLcode status,
 static CURLcode Curl_tftp(struct connectdata *conn, bool *done)
 {
   struct SessionHandle  *data = conn->data;
-  tftp_state_data_t     *state =
-    (tftp_state_data_t *) conn->data->reqdata.proto.tftp;
+  tftp_state_data_t     *state;
   tftp_event_t          event;
   CURLcode              code;
   int                   rc;
@@ -716,12 +715,14 @@ static CURLcode Curl_tftp(struct connectdata *conn, bool *done)
     make sure we have a good 'struct TFTP' to play with. For new connections,
     the struct TFTP is allocated and setup in the Curl_tftp_connect() function.
   */
-  if(!state) {
+  Curl_reset_reqproto(conn);
+
+  if(!data->reqdata.proto.tftp) {
     code = Curl_tftp_connect(conn, done);
     if(code)
       return code;
-    state = (tftp_state_data_t *)conn->data->reqdata.proto.tftp;
   }
+  state = (tftp_state_data_t *)conn->data->reqdata.proto.tftp;
 
   code = Curl_readwrite_init(conn);
   if(code)