Browse Source

Bugfix: Need to remove and re-add curl easy handles from multi to start a new request

Luke Dashjr 13 years ago
parent
commit
88afbe9c26
1 changed files with 12 additions and 2 deletions
  1. 12 2
      miner.c

+ 12 - 2
miner.c

@@ -3775,8 +3775,18 @@ static void *submit_work_thread(__maybe_unused void *userdata)
 		while( (cm = curl_multi_info_read(curlm, &n)) ) {
 		while( (cm = curl_multi_info_read(curlm, &n)) ) {
 			if (cm->msg == CURLMSG_DONE)
 			if (cm->msg == CURLMSG_DONE)
 			{
 			{
+				bool finished;
 				json_t *val = json_rpc_call_completed(cm->easy_handle, cm->data.result, false, NULL, &sws);
 				json_t *val = json_rpc_call_completed(cm->easy_handle, cm->data.result, false, NULL, &sws);
-				if (submit_upstream_work_completed(sws->work, sws->resubmit, &sws->tv_submit, val) || !retry_submission(sws)) {
+				curl_multi_remove_handle(curlm, cm->easy_handle);
+				finished = submit_upstream_work_completed(sws->work, sws->resubmit, &sws->tv_submit, val);
+				if (!finished) {
+					if (retry_submission(sws))
+						curl_multi_add_handle(curlm, sws->ce->curl);
+					else
+						finished = true;
+				}
+				
+				if (finished) {
 					--wip;
 					--wip;
 					++tsreduce;
 					++tsreduce;
 					struct pool *pool = sws->work->pool;
 					struct pool *pool = sws->work->pool;
@@ -3784,8 +3794,8 @@ static void *submit_work_thread(__maybe_unused void *userdata)
 						pool->sws_waiting_on_curl->ce = sws->ce;
 						pool->sws_waiting_on_curl->ce = sws->ce;
 						sws_has_ce(pool->sws_waiting_on_curl);
 						sws_has_ce(pool->sws_waiting_on_curl);
 						pool->sws_waiting_on_curl = pool->sws_waiting_on_curl->next;
 						pool->sws_waiting_on_curl = pool->sws_waiting_on_curl->next;
+						curl_multi_add_handle(curlm, sws->ce->curl);
 					} else {
 					} else {
-						curl_multi_remove_handle(curlm, cm->easy_handle);
 						push_curl_entry(sws->ce, sws->work->pool);
 						push_curl_entry(sws->ce, sws->work->pool);
 					}
 					}
 					free_sws(sws);
 					free_sws(sws);