diff --git a/libgearman/client.cc b/libgearman/client.cc index 9b69644..afcf590 100644 --- a/libgearman/client.cc +++ b/libgearman/client.cc @@ -1374,11 +1374,7 @@ static inline gearman_return_t _client_run_tasks(gearman_client_st *client, gear if (client->new_tasks == 0) { - gearman_return_t local_ret= gearman_flush_all(client->universal); - if (gearman_failed(local_ret)) - { - return local_ret; - } + gearman_flush_all(client->universal); } } diff --git a/libgearman/universal.cc b/libgearman/universal.cc index e325e71..9027d7e 100644 --- a/libgearman/universal.cc +++ b/libgearman/universal.cc @@ -230,7 +230,12 @@ void gearman_reset(gearman_universal_st& universal) } } -gearman_return_t gearman_flush_all(gearman_universal_st& universal) +/* + * Flush all shouldn't return any error, because there's no way to indicate + * which connection experienced an issue. Error detection is better done in gearman_wait() + * after flushing all the connections here. + */ +void gearman_flush_all(gearman_universal_st& universal) { for (gearman_connection_st *con= universal.con_list; con; con= con->next) { @@ -239,14 +244,8 @@ gearman_return_t gearman_flush_all(gearman_universal_st& universal) continue; } - gearman_return_t ret= con->flush(); - if (gearman_failed(ret) and ret != GEARMAN_IO_WAIT) - { - return ret; - } + con->flush(); } - - return GEARMAN_SUCCESS; } gearman_return_t gearman_wait(gearman_universal_st& universal) diff --git a/libgearman/universal.hpp b/libgearman/universal.hpp index 6a565b2..ca500f5 100644 --- a/libgearman/universal.hpp +++ b/libgearman/universal.hpp @@ -64,7 +64,7 @@ void gearman_universal_set_namespace(gearman_universal_st &self, const char *nam void gearman_reset(gearman_universal_st& universal); // Flush the send buffer for all connections. -gearman_return_t gearman_flush_all(gearman_universal_st&); +void gearman_flush_all(gearman_universal_st&); /** * Set custom memory allocation function for workloads. Normally gearman uses diff --git a/tests/libgearman-1.0/multi_client_test.cc b/tests/libgearman-1.0/multi_client_test.cc index f32333c..9965956 100644 --- a/tests/libgearman-1.0/multi_client_test.cc +++ b/tests/libgearman-1.0/multi_client_test.cc @@ -116,8 +116,7 @@ static test_return_t multi_client_test(void *object) gearman_client_do_background(client_to_both, worker_function, unique_2, gearman_string_param(value), job_handle)); const char* unique_3= "unique_3"; - // This is a bug! Should get back SUCCESS. - test_compare(GEARMAN_COULD_NOT_CONNECT, + test_compare(GEARMAN_SUCCESS, gearman_client_do_background(client_to_both, worker_function, unique_3, gearman_string_param(value), job_handle)); // The job unique_2 is truly lost, but unique_3 will end up at the gearmand server 2 @@ -131,7 +130,7 @@ static test_return_t multi_client_test(void *object) gearman_status_return(unique_3_status)); } - // Next, proving that the job is present on server 2. This is a bug! We were told above that COULD_NOT_CONNECT. + // Next, proving that the job is present on server 2. { gearman_status_t unique_3_status= gearman_client_unique_status(client_to_2, unique_3, strlen(unique_3)); test_compare(GEARMAN_SUCCESS,