瀏覽代碼

cmUVHandlePtr: Add uv_idle_ptr::{start,stop} methods

These were missing w.r.t. the pattern established for other handle wrappers.
Brad King 1 年之前
父節點
當前提交
fb7ee82271
共有 3 個文件被更改,包括 28 次插入1 次删除
  1. 12 0
      Source/cmUVHandlePtr.cxx
  2. 4 0
      Source/cmUVHandlePtr.h
  3. 12 1
      Tests/CMakeLib/testUVHandlePtr.cxx

+ 12 - 0
Source/cmUVHandlePtr.cxx

@@ -266,6 +266,18 @@ int uv_idle_ptr::init(uv_loop_t& loop, void* data)
   return uv_idle_init(&loop, *this);
 }
 
+int uv_idle_ptr::start(uv_idle_cb cb)
+{
+  assert(this->handle);
+  return uv_idle_start(*this, cb);
+}
+
+void uv_idle_ptr::stop()
+{
+  assert(this->handle);
+  uv_idle_stop(*this);
+}
+
 template class uv_handle_ptr_base_<uv_handle_t>;
 
 #define UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(NAME)                              \

+ 4 - 0
Source/cmUVHandlePtr.h

@@ -201,6 +201,10 @@ struct uv_idle_ptr : public uv_handle_ptr_<uv_idle_t>
   CM_INHERIT_CTOR(uv_idle_ptr, uv_handle_ptr_, <uv_idle_t>);
 
   int init(uv_loop_t& loop, void* data = nullptr);
+
+  int start(uv_idle_cb cb);
+
+  void stop();
 };
 
 struct uv_signal_ptr : public uv_handle_ptr_<uv_signal_t>

+ 12 - 1
Tests/CMakeLib/testUVHandlePtr.cxx

@@ -19,7 +19,7 @@ static bool testIdle()
 
   cm::uv_idle_ptr idle;
   idle.init(*loop, &idled);
-  uv_idle_start(idle, cb);
+  idle.start(cb);
   uv_run(loop, UV_RUN_DEFAULT);
 
   if (!idled) {
@@ -27,6 +27,17 @@ static bool testIdle()
     return false;
   }
 
+  idled = false;
+
+  idle.start(cb);
+  idle.stop();
+  uv_run(loop, UV_RUN_DEFAULT);
+
+  if (idled) {
+    std::cerr << "uv_idle_ptr::stop did not stop callback" << std::endl;
+    return false;
+  }
+
   return true;
 }