Brian Aker 11 лет назад
Родитель
Сommit
2833e6725f
8 измененных файлов с 56 добавлено и 12 удалено
  1. 4 0
      ChangeLog
  2. 1 4
      libgearman/client.hpp
  3. 24 0
      libgearman/interface/task.hpp
  4. 10 0
      libgearman/task.cc
  5. 1 2
      libgearman/worker.hpp
  6. 12 2
      libtest/port.cc
  7. 2 2
      tests/basic.cc
  8. 2 2
      tests/ephemeral.am

+ 4 - 0
ChangeLog

@@ -1,3 +1,7 @@
+1.1.9
+* Added gearman_task_is_finished()
+
+
 1.1.8 Thu Jun  6 18:47:01 EDT 2013
 * Postgres test case now passes.
 * SSL support added.

+ 1 - 4
libgearman/client.hpp

@@ -90,12 +90,9 @@ public:
     {
       throw std::runtime_error("gearman_client_create() failed");
     }
-    enable_logging();
-
-    gearman_client_add_server(_client, "localhost", arg);
-
     enable_logging();
     enable_ssl();
+    gearman_client_add_server(_client, "localhost", arg);
   }
 
   gearman_client_st* operator&() const

+ 24 - 0
libgearman/interface/task.hpp

@@ -179,6 +179,30 @@ struct Task
     return _error.error();
   }
 
+  bool is_finished() const
+  {
+    switch (state)
+    {
+      case GEARMAN_TASK_STATE_NEW:
+      case GEARMAN_TASK_STATE_SUBMIT:
+      case GEARMAN_TASK_STATE_WORKLOAD:
+      case GEARMAN_TASK_STATE_WORK:
+      case GEARMAN_TASK_STATE_CREATED:
+      case GEARMAN_TASK_STATE_DATA:
+      case GEARMAN_TASK_STATE_WARNING:
+      case GEARMAN_TASK_STATE_STATUS:
+        return false;
+
+      case GEARMAN_TASK_STATE_COMPLETE:
+      case GEARMAN_TASK_STATE_EXCEPTION:
+      case GEARMAN_TASK_STATE_FAIL:
+      case GEARMAN_TASK_STATE_FINISHED:
+        return true;
+    }
+
+    return false;
+  }
+
 private:
   gearman_task_st* _shell;
   gearman_task_st _owned_shell;

+ 10 - 0
libgearman/task.cc

@@ -476,3 +476,13 @@ gearman_string_t gearman_task_exception(const gearman_task_st* task_shell)
   static gearman_string_t ret= {0, 0};
   return ret;
 }
+
+bool gearman_task_is_finished(const gearman_task_st *task_shell)
+{
+  if (task_shell and task_shell->impl())
+  {
+    task_shell->impl()->is_finished();
+  }
+
+  return false;
+}

+ 1 - 2
libgearman/worker.hpp

@@ -78,10 +78,9 @@ public:
       throw std::runtime_error("gearman_worker_create() failed");
     }
     enable_logging();
+    enable_ssl();
 
     gearman_worker_add_server(_worker, "localhost", arg);
-
-    enable_ssl();
   }
 
   gearman_worker_st* operator&() const

+ 12 - 2
libtest/port.cc

@@ -114,13 +114,23 @@ static socket_st all_socket_fd;
 
 static in_port_t global_port= 0;
 
+static void initialize_default_port()
+{
+  global_port= get_free_port();
+}
+
+static pthread_once_t default_port_once= PTHREAD_ONCE_INIT;
+
 namespace libtest {
 
 in_port_t default_port()
 {
-  if (global_port == 0)
   {
-    global_port= get_free_port();
+    int ret;
+    if ((ret= pthread_once(&default_port_once, initialize_default_port)) != 0)
+    {
+      FATAL(strerror(ret));
+    }
   }
 
   return global_port;

+ 2 - 2
tests/basic.cc

@@ -91,10 +91,10 @@ test_return_t worker_echo_test(void *object)
   test_truth(test);
 
   gearman_worker_st *worker= test->worker;
-  test_truth(worker);
+  ASSERT_TRUE(worker);
 
   ASSERT_EQ(gearman_worker_echo(worker, test_literal_param("This is my echo test")),
-               GEARMAN_SUCCESS);
+            GEARMAN_SUCCESS);
 
   return TEST_SUCCESS;
 }

+ 2 - 2
tests/ephemeral.am

@@ -21,10 +21,10 @@ check_PROGRAMS += t/ephemeral
 noinst_PROGRAMS += t/ephemeral
 
 test-ephemeral: t/ephemeral gearmand/gearmand
-	@tests/ephemeral_test
+	@t/ephemeral
 
 gdb-ephemeral: t/ephemeral gearmand/gearmand
-	@$(GDB_COMMAND) tests/ephemeral
+	@$(GDB_COMMAND) t/ephemeral
 
 helgrind-ephemeral: t/ephemeral gearmand/gearmand
 	@$(HELGRIND_COMMAND) t/ephemeral