helloadhavan/github_issues huggingface dataset:
Repository: ggml-org/llama.cpp
Pull request: CUDA: fix --split-mode row race condition

Fixes https://github.com/ggerganov/llama.cpp/issues/8801#issuecomment-2332899701 .

The problem is that `--split-mode row` uses multiple CUDA streams to overlap data transfer with computation but on CUDA GPUs that are Volta or newer each of these streams allocates a temporary buffer for the stream-k fixup. And because it's not safe to allocate temporary buffers with multiple CUDA streams in parallel this leads to a race condition. However, because both stream-k decomposition and `--split-mode row` mitigates tail effects it's fine to just not use stream-k if multiple parallel CUDA streams are in use; the performance difference with 3x RTX 4090 is ~1%.

Long-term it may make sense to think about how we can safely handle multiple parallel CUDA streams. I think a good approach would be to move the parallelism from something CUDA-specific to something at the level of GGML compute graphs. That would also enable the reuse of the code for other backends.

Changed files:
filename: ggml/src/ggml-cuda/mmq.cu
patch: @@ -26,7 +26,11 @@ void ggml_cuda_op_mul_mat_q(
     // nrows_dst == nrows of the matrix that the kernel writes into
     const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff;
 
-    const mmq_args args = {src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stride00, src1_padded_row_size, src1_ncols, ne11, nrows_dst};
+    // The stream-k decomposition is only faster for recent NVIDIA GPUs.
+    // Also its fixup needs to allocate a temporary buffer in the memory pool.
+    // There are multiple parallel CUDA streams for src1_ncols != ne11 which would introduce a race condition for this buffer.
+    const bool use_stream_k = compute_capability >= CC_VOLTA && compute_capability < CC_OFFSET_AMD && src1_ncols == ne11;
+    const mmq_args args = {src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stride00, src1_padded_row_size, src1_ncols, ne11, nrows_dst, use_stream_k};
 
     switch (src0->type) {
         case GGML_TYPE_Q4_0:

filename: ggml/src/ggml-cuda/mmq.cuh
patch: @@ -2742,6 +2742,7 @@ struct mmq_args {
     int64_t ne00; int64_t ne01; int64_t stride01;
     int64_t ne10; int64_t ne11; int64_t stride11;
     int64_t ne0;
+    bool use_stream_k;
 };
 
 template<ggml_type type>
@@ -2777,8 +2778,7 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a
     const int ntx = (args.ne11 + mmq_x - 1) / mmq_x;
     const dim3 block_nums_xy_tiling(nty, ntx, 1);
 
-    const bool use_stream_k = cc >= CC_VOLTA && cc < CC_OFFSET_AMD;
-    if (!use_stream_k) {
+    if (!args.use_stream_k) {
         if (args.ne01 % mmq_y == 0) {
             constexpr bool need_check = false;
             mul_mat_q<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_xy_tiling, block_dims, shmem, stream>>>
Repository: denoland/deno
Pull request: fix: errors with CallSite methods

Fixes https://github.com/denoland/deno/issues/24898

Changed files:
filename: Cargo.lock
patch: @@ -1357,9 +1357,9 @@ dependencies = [
 
 [[package]]
 name = "deno_core"
-version = "0.302.0"
+version = "0.303.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "063e249fa30a9ee3320f5b1a69f86be1d98db234a112671ad85f648c876a6705"
+checksum = "a9cd2cc931f61dee2db67ce9d032d229dda981be29d68dfd530a3dc1187ddd6b"
 dependencies = [
  "anyhow",
  "bincode",
@@ -1843,9 +1843,9 @@ dependencies = [
 
 [[package]]
 name = "deno_ops"
-version = "0.178.0"
+version = "0.179.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df4f8e16146f71cd35f3730350005be64807e37a89900366b55d6d798ab545a"
+checksum = "1dbb9802b8b976e73872ae6e03303532e6056236467053aa6df02f7deb33488c"
 dependencies = [
  "proc-macro-rules",
  "proc-macro2",
@@ -6078,9 +6078,9 @@ dependencies = [
 
 [[package]]
 name = "serde_v8"
-version = "0.211.0"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74f34bfd3eb4e7d79bfb7ec0c0870cc4413289c047502c87e3011f09a5d0dd98"
+checksum = "bf9a8693e4e54bf21fe51b953b10f98a0e32040671f18c4065f6014f0317ae80"
 dependencies = [
  "num-bigint",
  "serde",

filename: Cargo.toml
patch: @@ -45,7 +45,7 @@ repository = "https://github.com/denoland/deno"
 
 [workspace.dependencies]
 deno_ast = { version = "=0.41.2", features = ["transpiling"] }
-deno_core = { version = "0.302.0" }
+deno_core = { version = "0.303.0" }
 
 deno_bench_util = { version = "0.158.0", path = "./bench_util" }
 deno_lockfile = "0.20.0"
Repository: facebook/react
Pull request: Remove logic for multiple error recovery attempts

This deletes some internal behavior that was only used by useOpaqueIdentifier, as an implementation detail: if an update is
scheduled during the render phase, and something threw an error, we would try rendering again, either until there were no more errors or until there were no more render phase updates. This was not a publicly defined behavior — regular render phase updates are accompanied by a warning.

Because useOpaqueIdentifier has been replaced by useId, and does not rely on this implementation detail, we can delete this code.

Changed files:
filename: packages/react-reconciler/src/ReactFiberWorkLoop.new.js
patch: @@ -894,23 +894,7 @@ function recoverFromConcurrentError(root, errorRetryLanes) {
     }
   }
 
-  let exitStatus;
-
-  const MAX_ERROR_RETRY_ATTEMPTS = 50;
-  for (let i = 0; i < MAX_ERROR_RETRY_ATTEMPTS; i++) {
-    exitStatus = renderRootSync(root, errorRetryLanes);
-    if (
-      exitStatus === RootErrored &&
-      workInProgressRootRenderPhaseUpdatedLanes !== NoLanes
-    ) {
-      // There was a render phase update during this render. Some internal React
-      // implementation details may use this as a trick to schedule another
-      // render pass. To protect against an inifinite loop, eventually
-      // we'll give up.
-      continue;
-    }
-    break;
-  }
+  const exitStatus = renderRootSync(root, errorRetryLanes);
 
   executionContext = prevExecutionContext;
 

filename: packages/react-reconciler/src/ReactFiberWorkLoop.old.js
patch: @@ -894,23 +894,7 @@ function recoverFromConcurrentError(root, errorRetryLanes) {
     }
   }
 
-  let exitStatus;
-
-  const MAX_ERROR_RETRY_ATTEMPTS = 50;
-  for (let i = 0; i < MAX_ERROR_RETRY_ATTEMPTS; i++) {
-    exitStatus = renderRootSync(root, errorRetryLanes);
-    if (
-      exitStatus === RootErrored &&
-      workInProgressRootRenderPhaseUpdatedLanes !== NoLanes
-    ) {
-      // There was a render phase update during this render. Some internal React
-      // implementation details may use this as a trick to schedule another
-      // render pass. To protect against an inifinite loop, eventually
-      // we'll give up.
-      continue;
-    }
-    break;
-  }
+  const exitStatus = renderRootSync(root, errorRetryLanes);
 
   executionContext = prevExecutionContext;
Repository: nodejs/node
Pull request: doc: fix webcrypto.md AES-GCM backticks

Fixes the closing backticks on two AES-GCM occurences.

Changed files:
filename: doc/api/webcrypto.md
patch: @@ -567,7 +567,7 @@ The algorithms currently supported include:
 * `'RSA-OAEP'`
 * `'AES-CTR'`
 * `'AES-CBC'`
-* `'AES-GCM`'
+* `'AES-GCM'`
 
 ### `subtle.deriveBits(algorithm, baseKey[, length])`
 
@@ -703,7 +703,7 @@ The algorithms currently supported include:
 * `'RSA-OAEP'`
 * `'AES-CTR'`
 * `'AES-CBC'`
-* `'AES-GCM`'
+* `'AES-GCM'`
 
 ### `subtle.exportKey(format, key)`
Repository: electron/electron
Pull request: fix: update `BrowserView#lastWindowSize` after window resize

Backport of #43463

See that PR for details.


Notes: Fixed BrowserView auto resize issue.


Changed files:
filename: lib/browser/api/browser-view.ts
patch: @@ -145,6 +145,12 @@ export default class BrowserView {
     if (this.#autoHorizontalProportion || this.#autoVerticalProportion) {
       this.#webContentsView.setBounds(newViewBounds);
     }
+
+    // Update #lastWindowSize value after browser windows resize
+    this.#lastWindowSize = {
+      width: newBounds.width,
+      height: newBounds.height
+    };
   }
 
   get webContentsView () {
Repository: ggml-org/llama.cpp
Pull request: Webui - change setText command from parent window to also send the message.

- setText command from parent window (for llama-vscode) now sends the message automatically.
- Upgrade packages versions to fix vulnerabilities with "npm audit fix" command.


Changed files:
filename: tools/server/webui/src/components/ChatScreen.tsx
patch: @@ -157,6 +157,9 @@ export default function ChatScreen() {
     clearExtraContext();
   };
 
+  // for vscode context
+  textarea.refOnSubmit.current = sendNewMessage;
+
   const handleEditMessage = async (msg: Message, content: string) => {
     if (!viewingChat) return;
     setCurrNodeId(msg.id);

filename: tools/server/webui/src/components/useChatTextarea.ts
patch: @@ -37,6 +37,7 @@ export interface ChatTextareaApi {
   setValue: (value: string) => void;
   focus: () => void;
   ref: React.RefObject<HTMLTextAreaElement>;
+  refOnSubmit: React.MutableRefObject<(() => void) | null>; // Submit handler
   onInput: (event: React.FormEvent<HTMLTextAreaElement>) => void; // Input handler
 }
 
@@ -46,6 +47,7 @@ export interface ChatTextareaApi {
 export function useChatTextarea(initValue: string): ChatTextareaApi {
   const [savedInitValue, setSavedInitValue] = useState<string>(initValue);
   const textareaRef = useRef<HTMLTextAreaElement>(null);
+  const onSubmitRef = useRef<(() => void) | null>(null);
 
   // Effect to set initial value and height on mount or when initValue changes
   useEffect(() => {
@@ -91,6 +93,7 @@ export function useChatTextarea(initValue: string): ChatTextareaApi {
       }
     },
     ref: textareaRef,
+    refOnSubmit: onSubmitRef,
     onInput: handleInput,
   };
 }

filename: tools/server/webui/src/utils/llama-vscode.ts
patch: @@ -33,6 +33,9 @@ export const useVSCodeContext = (textarea: ChatTextareaApi) => {
           });
         }
         textarea.focus();
+        setTimeout(() => {
+          textarea.refOnSubmit.current?.();
+        }, 10); // wait for setExtraContext to finish
       }
     };
Repository: denoland/deno
Pull request: fix(ext/web): make TextDecoderResource use cppgc

Fixes https://github.com/denoland/deno/issues/24878

Changed files:
filename: ext/web/08_text_encoding.js
patch: @@ -56,8 +56,8 @@ class TextDecoder {
   /** @type {boolean} */
   #utf8SinglePass;
 
-  /** @type {number | null} */
-  #rid = null;
+  /** @type {object | null} */
+  #handle = null;
 
   /**
    * @param {string} label
@@ -159,7 +159,7 @@ class TextDecoder {
       }
 
       // Fast path for single pass encoding.
-      if (!stream && this.#rid === null) {
+      if (!stream && this.#handle === null) {
         // Fast path for utf8 single pass encoding.
         if (this.#utf8SinglePass) {
           return op_encoding_decode_utf8(input, this.#ignoreBOM);
@@ -173,18 +173,17 @@ class TextDecoder {
         );
       }
 
-      if (this.#rid === null) {
-        this.#rid = op_encoding_new_decoder(
+      if (this.#handle === null) {
+        this.#handle = op_encoding_new_decoder(
           this.#encoding,
           this.#fatal,
           this.#ignoreBOM,
         );
       }
-      return op_encoding_decode(input, this.#rid, stream);
+      return op_encoding_decode(input, this.#handle, stream);
     } finally {
-      if (!stream && this.#rid !== null) {
-        core.close(this.#rid);
-        this.#rid = null;
+      if (!stream && this.#handle !== null) {
+        this.#handle = null;
       }
     }
   }

filename: ext/web/lib.rs
patch: @@ -13,9 +13,6 @@ use deno_core::op2;
 use deno_core::url::Url;
 use deno_core::v8;
 use deno_core::ByteString;
-use deno_core::OpState;
-use deno_core::Resource;
-use deno_core::ResourceId;
 use deno_core::ToJsBuffer;
 use deno_core::U16String;
 
@@ -277,14 +274,13 @@ fn op_encoding_decode_single(
   }
 }
 
-#[op2(fast)]
-#[smi]
+#[op2]
+#[cppgc]
 fn op_encoding_new_decoder(
-  state: &mut OpState,
   #[string] label: &str,
   fatal: bool,
   ignore_bom: bool,
-) -> Result<ResourceId, AnyError> {
+) -> Result<TextDecoderResource, AnyError> {
   let encoding = Encoding::for_label(label.as_bytes()).ok_or_else(|| {
     range_error(format!(
       "The encoding label provided ('{label}') is invalid."
@@ -297,24 +293,19 @@ fn op_encoding_new_decoder(
     encoding.new_decoder_with_bom_removal()
   };
 
-  let rid = state.resource_table.add(TextDecoderResource {
+  Ok(TextDecoderResource {
     decoder: RefCell::new(decoder),
     fatal,
-  });
-
-  Ok(rid)
+  })
 }
 
 #[op2]
 #[serde]
 fn op_encoding_decode(
-  state: &mut OpState,
   #[anybuffer] data: &[u8],
-  #[smi] rid: ResourceId,
+  #[cppgc] resource: &TextDecoderResource,
   stream: bool,
 ) -> Result<U16String, AnyError> {
-  let resource = state.resource_table.get::<TextDecoderResource>(rid)?;
-
   let mut decoder = resource.decoder.borrow_mut();
   let fatal = resource.fatal;
 
@@ -357,11 +348,7 @@ struct TextDecoderResource {
   fatal: bool,
 }
 
-impl Resource for TextDecoderResource {
-  fn name(&self) -> Cow<str> {
-    "textDecoder".into()
-  }
-}
+impl deno_core::GarbageCollected for TextDecoderResource {}
 
 #[op2(fast(op_encoding_encode_into_fast))]
 fn op_encoding_encode_into(
Repository: ggml-org/llama.cpp
Pull request: convert : bailingmoe : set yarn metadata if present

Set YaRN metadata if present since support was [finally added](https://huggingface.co/inclusionAI/Ling-plus/commit/21743af28b9522aacb4d86db90fc8399c8a6678d) and it looks to be bog standard. Tested with Ling-Coder-lite (manually configured).

NOTE: For some reason they have not updated the config on any of their models, so you have to add/enable this yourself, can be done in one of the following ways:
- On the commandline (no changes to old GGUFs necessary):
  ```bash
  ./llama-cli -m Ling-Coder-lite.gguf -c 16384 --rope-scaling yarn --rope-scale 4
  ```
- Change `max_position_embeddings` (multiply by 4) and `rope_scaling` in config.json and reconvert:
  ```json
  {
      "factor": 4.0,
      "original_max_position_embeddings": 4096,
      "type": "yarn"
  }
  ```
- Add/change metadata to old GGUF with `gguf_editor_gui.py`
- Download [dynamically modified GGUF](https://ciscai-gguf-editor.hf.space/download/mradermacher/Ling-Coder-lite-GGUF/Ling-Coder-lite.Q8_0.gguf?add=["bailingmoe.context_length",4,16384]&add=["bailingmoe.rope.scaling.type",8,"yarn"]&add=["bailingmoe.rope.scaling.factor",6,4]&add=["bailingmoe.rope.scaling.original_context_length",4,4096]) using [gguf-editor](https://huggingface.co/spaces/CISCai/gguf-editor)

Changed files:
filename: convert_hf_to_gguf.py
patch: @@ -5680,7 +5680,12 @@ def set_gguf_parameters(self):
         rope_dim = hparams.get("head_dim") or hparams["hidden_size"] // hparams["num_attention_heads"]
 
         self.gguf_writer.add_rope_dimension_count(rope_dim)
-        self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.NONE)
+        if (self.hparams.get("rope_scaling") or {}).get("type") == "yarn" and "factor" in self.hparams["rope_scaling"]:
+            self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.YARN)
+            self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"])
+            self.gguf_writer.add_rope_scaling_orig_ctx_len(self.hparams["rope_scaling"]["original_max_position_embeddings"])
+        else:
+            self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.NONE)
         self.gguf_writer.add_leading_dense_block_count(hparams["first_k_dense_replace"])
         self.gguf_writer.add_vocab_size(hparams["vocab_size"])
         self.gguf_writer.add_expert_feed_forward_length(hparams["moe_intermediate_size"])
Repository: nodejs/node
Pull request: doc: update blog release-post link

Updates the location since the file has been moved.

Changed files:
filename: doc/contributing/releases.md
patch: @@ -1442,5 +1442,5 @@ Typical resolution: sign the release again.
 [`create-release-proposal`]: https://github.com/nodejs/node/actions/workflows/create-release-proposal.yml
 [build-infra team]: https://github.com/orgs/nodejs/teams/build-infra
 [expected assets]: https://github.com/nodejs/build/tree/HEAD/ansible/www-standalone/tools/promote/expected_assets
-[nodejs.org release-post.js script]: https://github.com/nodejs/nodejs.org/blob/HEAD/scripts/release-post/index.mjs
+[nodejs.org release-post.js script]: https://github.com/nodejs/nodejs.org/blob/HEAD/apps/site/scripts/release-post/index.mjs
 [nodejs.org repository]: https://github.com/nodejs/nodejs.org
Repository: vercel/next.js
Pull request: [ts-next-plugin] fix: validate metadata node before checking type

### What?

Received error from TS Log:

```txt
Cannot read properties of undefined (reading 'type')

TypeError: Cannot read properties of undefined (reading 'type')
 at hasCorrectType (…/next@15.4.0-canary.3…/next/dist/server/typescript/rules/metadata.js:212:14)
 at Object.getSemanticDiagnosticsForExportDeclaration (…
```

### Why?

`declaration` can be undefined but was passed via `as` assertion.

### How?

Remove the `as` assertion and correctly validate the `declaration.`

Changed files:
filename: packages/next/src/server/typescript/rules/metadata.ts
patch: @@ -206,7 +206,11 @@ const metadata = {
               }
             }
 
-            if (!hasCorrectType(declaration as tsModule.FunctionDeclaration)) {
+            if (
+              declaration &&
+              ts.isFunctionDeclaration(declaration) &&
+              !hasCorrectType(declaration)
+            ) {
               diagnostics.push({
                 file: source,
                 category: ts.DiagnosticCategory.Warning,
@@ -219,7 +223,11 @@ const metadata = {
           } else {
             // must be 'metadata' at this point
             const declaration = symbol.declarations?.[0]
-            if (!hasCorrectType(declaration as tsModule.VariableDeclaration)) {
+            if (
+              declaration &&
+              ts.isVariableDeclaration(declaration) &&
+              !hasCorrectType(declaration)
+            ) {
               diagnostics.push({
                 file: source,
                 category: ts.DiagnosticCategory.Warning,
Repository: vercel/next.js
Pull request: Update Turbopack production test manifest

This auto-generated PR updates the production integration test manifest used when testing Turbopack.

Changed files:
filename: test/turbopack-build-tests-manifest.json
patch: @@ -8049,7 +8049,7 @@
     "flakey": [],
     "runtimeError": false
   },
-  "test/e2e/socket-io/index.test.js": {
+  "test/e2e/socket-io/index.test.ts": {
     "passed": [
       "socket-io should support socket.io without falling back to polling"
     ],
Repository: ggml-org/llama.cpp
Pull request: SYCL: Disable mul_mat kernels for noncontiguous tensor b

Tests for non contiguous tensor b was added in b0ecbd434be024c06bf547491be444ed92e1123e which the kernels doesn't seem to support.

Disable it for now until we work on a fix.

Changed files:
filename: ggml/src/ggml-sycl/ggml-sycl.cpp
patch: @@ -3873,6 +3873,9 @@ static bool ggml_backend_sycl_device_supports_op(ggml_backend_dev_t dev, const g
                 if (a->ne[3] != b->ne[3]) {
                     return false;
                 }
+                if (!ggml_is_contiguous(b)) {
+                    return false;
+                }
                 ggml_type a_type = a->type;
                 if (a_type == GGML_TYPE_IQ4_NL  || a_type == GGML_TYPE_IQ4_XS ||
                     a_type == GGML_TYPE_IQ3_XXS || a_type == GGML_TYPE_IQ3_S  ||
Repository: denoland/deno
Pull request: perf(lsp): remove fallback config scopes for workspace folders

Stop adding fallback config scopes for workspace folders that don't have a `deno.json[c]` or `package.json`. These were necessary to pass tests while the scopes work was in progress, not anymore.

We still create scopes for workspace folders with settings like `deno.config` and `deno.importMap`.

Changed files:
filename: cli/lsp/config.rs
patch: @@ -1701,27 +1701,28 @@ impl ConfigTree {
         ws_settings = ws_settings.or(Some(&settings.unscoped));
       }
       if let Some(ws_settings) = ws_settings {
-        if let Some(config_path) = &ws_settings.config {
-          if let Ok(config_uri) = folder_uri.join(config_path) {
-            if let Ok(config_file_path) = config_uri.to_file_path() {
-              scopes.insert(
-                folder_uri.clone(),
-                Arc::new(
-                  ConfigData::load(
-                    Some(&config_file_path),
-                    folder_uri,
-                    settings,
-                    file_fetcher,
-                    &cached_fs,
-                    &deno_json_cache,
-                    &pkg_json_cache,
-                    &workspace_cache,
-                  )
-                  .await,
-                ),
-              );
-            }
-          }
+        let config_file_path = (|| {
+          let config_setting = ws_settings.config.as_ref()?;
+          let config_uri = folder_uri.join(config_setting).ok()?;
+          specifier_to_file_path(&config_uri).ok()
+        })();
+        if config_file_path.is_some() || ws_settings.import_map.is_some() {
+          scopes.insert(
+            folder_uri.clone(),
+            Arc::new(
+              ConfigData::load(
+                config_file_path.as_deref(),
+                folder_uri,
+                settings,
+                file_fetcher,
+                &cached_fs,
+                &deno_json_cache,
+                &pkg_json_cache,
+                &workspace_cache,
+              )
+              .await,
+            ),
+          );
         }
       }
     }
@@ -1772,29 +1773,6 @@ impl ConfigTree {
       }
     }
 
-    for folder_uri in settings.by_workspace_folder.keys() {
-      if !scopes
-        .keys()
-        .any(|s| folder_uri.as_str().starts_with(s.as_str()))
-      {
-        scopes.insert(
-          folder_uri.clone(),
-          Arc::new(
-            ConfigData::load(
-              None,
-              folder_uri,
-              settings,
-              file_fetcher,
-              &cached_fs,
-              &deno_json_cache,
-              &pkg_json_cache,
-              &workspace_cache,
-            )
-            .await,
-          ),
-        );
-      }
-    }
     self.scopes = Arc::new(scopes);
   }
Repository: electron/electron
Pull request: fix: UvHandle move semantics

Backport of #43615

See that PR for details.


Notes: none.

Changed files:
filename: shell/common/node_bindings.h
patch: @@ -62,8 +62,17 @@ class UvHandle {
   UvHandle() : t_{new T} {}
   ~UvHandle() { reset(); }
 
-  UvHandle(UvHandle&&) = default;
-  UvHandle& operator=(UvHandle&&) = default;
+  explicit UvHandle(UvHandle&& that) {
+    t_ = that.t_;
+    that.t_ = nullptr;
+  }
+
+  UvHandle& operator=(UvHandle&& that) {
+    reset();
+    t_ = that.t_;
+    that.t_ = nullptr;
+    return *this;
+  }
 
   UvHandle(const UvHandle&) = delete;
   UvHandle& operator=(const UvHandle&) = delete;