Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lua-luv for openSUSE:Factory checked 
in at 2023-12-06 23:47:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lua-luv (Old)
 and      /work/SRC/openSUSE:Factory/.lua-luv.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lua-luv"

Wed Dec  6 23:47:44 2023 rev:14 rq:1131025 version:MACRO

Changes:
--------
--- /work/SRC/openSUSE:Factory/lua-luv/lua-luv.changes  2022-02-13 
19:51:41.570316606 +0100
+++ /work/SRC/openSUSE:Factory/.lua-luv.new.25432/lua-luv.changes       
2023-12-06 23:48:04.438924794 +0100
@@ -1,0 +2,28 @@
+Mon Dec  4 10:05:58 UTC 2023 - Noah Dörr <archecra...@gmail.com>
+
+- Update to version 1.45.0-0:
+  * Add access(2) constants to the constants table
+  * thread_setaffinity: Allow affinity param to have a length less
+    than cpumask_size()
+  * avoid thread be released before it done
+  * fix thread arguments limit
+  * fix segfault in luv_check_handle/luv_check_stream
+  * add uv.errno table contains all uv errno value
+  * segfault on new_thread and worker.queue
+  * segfault on luv_check_handle
+  * uv.spawn example code in docs is broken
+  * pthread_create possible leak
+- Update to version 1.44.2-1:
+  * Removed output to stderr from poll callback
+- Update to version 1.44.2-0:
+  * Adds new function uv.available_parallelism
+  * uv.os_get_passwd: Better handling of gid/uid
+  * uv.fs_opendir and friends: Fix race condition when uv_dir_t
+    pointer doesn't change between allocations
+  * Fix leak from fs_scandir whenever it wasn't fully iterated via
+    fs_scandir_next
+  * Fix two possible fs_scandir segfaults
+- Add luv-fix-segfault-from-gc.patch fixing segfaults
+  (gh#luvit/luv#599 and gh#luvit/luv#644)
+
+-------------------------------------------------------------------

Old:
----
  luv-1.43.0-0.tar.gz

New:
----
  luv-1.45.0-0.tar.gz
  luv-fix-segfault-from-gc.patch

BETA DEBUG BEGIN:
  New:  * Fix two possible fs_scandir segfaults
- Add luv-fix-segfault-from-gc.patch fixing segfaults
  (gh#luvit/luv#599 and gh#luvit/luv#644)
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lua-luv.spec ++++++
--- /var/tmp/diff_new_pack.HbSc54/_old  2023-12-06 23:48:05.722972131 +0100
+++ /var/tmp/diff_new_pack.HbSc54/_new  2023-12-06 23:48:05.726972279 +0100
@@ -1,7 +1,7 @@
 #
-# spec file for package lua-luv
+# spec file
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 # Copyright (c) 2012 Togan Muftuoglu tog...@opensuse.org
 #
 # All modifications and additions to the file contributed by third parties
@@ -16,11 +16,12 @@
 # Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
+
 %if %{lua_version_nodots} == 51
 %define lua_default 1
 %endif
 %define mod_name luv
-%define upver 1.43.0-0
+%define upver 1.45.0-0
 %define fixver %(echo %{upver}|sed 's|-|~|g')
 %define libluv_sover 1
 %define flavor @BUILD_FLAVOR@%{nil}
@@ -39,12 +40,17 @@
 Source0:        
https://github.com/luvit/%{mod_name}/releases/download/%{upver}/%{mod_name}-%{upver}.tar.gz
 Patch0:         lua-link.patch
 Patch1:         luv-module-install.patch
+# PATCH-FIX-UPSTREAM luv-fix-segfault-from-gc.patch gh#luvit/luv#599 
mc...@suse.com
+# merged https://github.com/luvit/luv/commit/ff5e90249e08 and
+# https://github.com/luvit/luv/commit/ecf3988c0be9
+# Also closes gh#luvit/luv#644
+Patch2:         luv-fix-segfault-from-gc.patch
+BuildRequires:  %{flavor}-compat-5.3
+BuildRequires:  %{flavor}-devel
+BuildRequires:  %{flavor}-luafilesystem
 BuildRequires:  cmake
 BuildRequires:  libuv-devel
 BuildRequires:  lua-macros
-BuildRequires:  %{flavor}-devel
-BuildRequires:  %{flavor}-luafilesystem
-BuildRequires:  %{flavor}-compat-5.3
 Requires:       %{flavor}
 %lua_provides
 %if "%{flavor}" == "lua"

++++++ luv-1.43.0-0.tar.gz -> luv-1.45.0-0.tar.gz ++++++
++++ 33402 lines of diff (skipped)

++++++ luv-fix-segfault-from-gc.patch ++++++
diff --git a/src/handle.c b/src/handle.c
index 9180da34..0977a565 100644
--- a/src/handle.c
+++ b/src/handle.c
@@ -88,13 +88,19 @@ static int luv_is_closing(lua_State* L) {
   return 1;
 }
 
+static void luv_handle_free(uv_handle_t* handle);
+
 static void luv_close_cb(uv_handle_t* handle) {
   lua_State* L;
   luv_handle_t* data = (luv_handle_t*)handle->data;
   if (!data) return;
   L = data->ctx->L;
-  luv_call_callback(L, data, LUV_CLOSED, 0);
-  luv_unref_handle(L, data);
+  if(data->ref > 0) {
+    luv_call_callback(L, data, LUV_CLOSED, 0);
+    luv_unref_handle(L, data);
+  } else {
+    luv_handle_free(handle);
+  }
 }
 
 static int luv_close(lua_State* L) {
@@ -127,12 +133,13 @@ static void luv_gc_cb(uv_handle_t* handle) {
 static int luv_handle_gc(lua_State* L) {
   uv_handle_t** udata = (uv_handle_t**)lua_touserdata(L, 1);
   uv_handle_t* handle = *udata;
+  luv_handle_t* data = (luv_handle_t*)handle->data;
 
   // Only cleanup if the handle hasn't been cleaned up yet.
-  if (handle) {
+  if (data->ref == LUA_NOREF) {
     if (!uv_is_closing(handle)) {
       // If the handle is not closed yet, close it first before freeing memory.
-      uv_close(handle, luv_gc_cb);
+      uv_close(handle, luv_handle_free);
     }
     else {
       // Otherwise, free the memory right away.
@@ -140,6 +147,10 @@ static int luv_handle_gc(lua_State* L) {
     }
     // Mark as cleaned up by wiping the dangling pointer.
     *udata = NULL;
+  } else {
+    // os.exit maybe cause gc before close_cb
+    // use LUA_REFNIL to tell close_cb to free memory.
+    data->ref = LUA_REFNIL;
   }
 
   return 0;
diff --git a/src/lhandle.c b/src/lhandle.c
index 92b725a9..1c4cc800 100644
--- a/src/lhandle.c
+++ b/src/lhandle.c
@@ -104,6 +104,7 @@ static void luv_call_callback(lua_State* L, luv_handle_t* 
data, luv_callback_id
 
 static void luv_unref_handle(lua_State* L, luv_handle_t* data) {
   luaL_unref(L, LUA_REGISTRYINDEX, data->ref);
+  data->ref = LUA_NOREF;
   luaL_unref(L, LUA_REGISTRYINDEX, data->callbacks[0]);
   luaL_unref(L, LUA_REGISTRYINDEX, data->callbacks[1]);
 }
diff --git a/src/fs.c b/src/fs.c
index 8ef36145..af59caa9 100644
--- a/src/fs.c
+++ b/src/fs.c
@@ -363,6 +363,9 @@ static int push_fs_result(lua_State* L, uv_fs_t* req) {
       return 1;
     }
     case UV_FS_READDIR: {
+      luaL_unref(L, LUA_REGISTRYINDEX, data->data_ref);
+      data->data_ref = LUA_NOREF;
+
       if(req->result > 0) {
         size_t i;
         uv_dir_t *dir = (uv_dir_t*)req->ptr;
@@ -938,6 +941,11 @@ static int luv_fs_readdir(lua_State* L) {
 
   req = (uv_fs_t*)lua_newuserdata(L, uv_req_size(UV_FS));
   req->data = luv_setup_req(L, ctx, ref);
+
+  // ref the luv_dir_t so it doesn't get garbage collected before the readdir 
cb
+  lua_pushvalue(L, 1);
+  ((luv_req_t*)req->data)->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
   FS_CALL(uv_fs_readdir, req, dir->handle);
 }
 
     p(stat)

Reply via email to