Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wlroots for openSUSE:Factory checked 
in at 2025-10-28 14:47:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wlroots (Old)
 and      /work/SRC/openSUSE:Factory/.wlroots.new.1980 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wlroots"

Tue Oct 28 14:47:05 2025 rev:38 rq:1313916 version:0.19.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/wlroots/wlroots.changes  2025-10-13 
15:36:55.325215679 +0200
+++ /work/SRC/openSUSE:Factory/.wlroots.new.1980/wlroots.changes        
2025-10-28 14:47:52.498240784 +0100
@@ -1,0 +2,12 @@
+Fri Oct 24 15:18:31 UTC 2025 - zeus <[email protected]>
+
+- Update to 0.19.2
+  * xwm: Fix double-close
+  * xwayland: fix assertion failure in wlr_xwayland_shell_v1
+  * backend, output: send commit events after applying all in 
wlr_backend_commit()
+  * backend/session: fix crash on udev device remove event
+  * linux_drm_syncobj_v1: fix use-after-free in surface_commit_destroy()
+  * ci: fix VKMS lookup after faux bus migration
+  * util/box.c: use 1/256 instead of 1/65536 in wlr_box_closest_point()
+
+-------------------------------------------------------------------

Old:
----
  wlroots-0.19.1.tar.gz
  wlroots-0.19.1.tar.gz.sig

New:
----
  wlroots-0.19.2.tar.gz
  wlroots-0.19.2.tar.gz.sig

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

Other differences:
------------------
++++++ wlroots.spec ++++++
--- /var/tmp/diff_new_pack.fycKl6/_old  2025-10-28 14:47:53.202270393 +0100
+++ /var/tmp/diff_new_pack.fycKl6/_new  2025-10-28 14:47:53.202270393 +0100
@@ -18,7 +18,7 @@
 
 %global ver_suffix 0.19
 %global sover      0_19
-%global patch_ver  1
+%global patch_ver  2
 %global libname libwlroots-%{sover}
 %bcond_without  drm_backend
 %bcond_without  libinput_backend

++++++ wlroots-0.19.1.tar.gz -> wlroots-0.19.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/.builds/archlinux.yml 
new/wlroots-0.19.2/.builds/archlinux.yml
--- old/wlroots-0.19.1/.builds/archlinux.yml    2025-09-21 23:03:29.000000000 
+0200
+++ new/wlroots-0.19.2/.builds/archlinux.yml    2025-10-22 00:21:53.000000000 
+0200
@@ -41,9 +41,10 @@
       cd wlroots/build-gcc/tinywl
       sudo modprobe vkms
       udevadm settle
+      card="/dev/dri/$(ls /sys/devices/faux/vkms/drm/ | grep ^card)"
       export WLR_BACKENDS=drm
       export WLR_RENDERER=pixman
-      export WLR_DRM_DEVICES=/dev/dri/by-path/platform-vkms-card
+      export WLR_DRM_DEVICES="$card"
       export UBSAN_OPTIONS=halt_on_error=1
-      sudo chmod ugo+rw /dev/dri/by-path/platform-vkms-card
+      sudo chmod ugo+rw "$card"
       sudo -E seatd-launch -- ./tinywl -s 'kill $PPID' || [ $? = 143 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/backend/backend.c 
new/wlroots-0.19.2/backend/backend.c
--- old/wlroots-0.19.1/backend/backend.c        2025-09-21 23:03:29.000000000 
+0200
+++ new/wlroots-0.19.2/backend/backend.c        2025-10-22 00:21:53.000000000 
+0200
@@ -485,5 +485,10 @@
                output_apply_commit(state->output, &state->base);
        }
 
+       for (size_t i = 0; i < states_len; i++) {
+               const struct wlr_backend_output_state *state = &states[i];
+               output_send_commit_event(state->output, &state->base);
+       }
+
        return true;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/backend/session/session.c 
new/wlroots-0.19.2/backend/session/session.c
--- old/wlroots-0.19.1/backend/session/session.c        2025-09-21 
23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/backend/session/session.c        2025-10-22 
00:21:53.000000000 +0200
@@ -367,7 +367,10 @@
        }
 
        assert(wl_list_empty(&dev->events.change.listener_list));
-       assert(wl_list_empty(&dev->events.remove.listener_list));
+       // TODO: assert that the "remove" listener list is empty as well. 
Listeners
+       // will typically call wlr_session_close_file() in response, and
+       // wl_signal_emit_mutable() installs two phantom listeners, so we'd 
count
+       // these two.
 
        close(dev->fd);
        wl_list_remove(&dev->link);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/include/types/wlr_output.h 
new/wlroots-0.19.2/include/types/wlr_output.h
--- old/wlroots-0.19.1/include/types/wlr_output.h       2025-09-21 
23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/include/types/wlr_output.h       2025-10-22 
00:21:53.000000000 +0200
@@ -25,6 +25,7 @@
 
 bool output_prepare_commit(struct wlr_output *output, const struct 
wlr_output_state *state);
 void output_apply_commit(struct wlr_output *output, const struct 
wlr_output_state *state);
+void output_send_commit_event(struct wlr_output *output, const struct 
wlr_output_state *state);
 
 void output_state_get_buffer_src_box(const struct wlr_output_state *state,
        struct wlr_fbox *out);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/include/xwayland/xwm.h 
new/wlroots-0.19.2/include/xwayland/xwm.h
--- old/wlroots-0.19.1/include/xwayland/xwm.h   2025-09-21 23:03:29.000000000 
+0200
+++ new/wlroots-0.19.2/include/xwayland/xwm.h   2025-10-22 00:21:53.000000000 
+0200
@@ -162,6 +162,7 @@
        struct wl_listener drop_focus_destroy;
 };
 
+// xwm_create takes ownership of wm_fd and will close it under all 
circumstances.
 struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland, int wm_fd);
 
 void xwm_destroy(struct wlr_xwm *xwm);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/meson.build 
new/wlroots-0.19.2/meson.build
--- old/wlroots-0.19.1/meson.build      2025-09-21 23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/meson.build      2025-10-22 00:21:53.000000000 +0200
@@ -1,7 +1,7 @@
 project(
        'wlroots',
        'c',
-       version: '0.19.1',
+       version: '0.19.2',
        license: 'MIT',
        meson_version: '>=1.3',
        default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/types/output/output.c 
new/wlroots-0.19.2/types/output/output.c
--- old/wlroots-0.19.1/types/output/output.c    2025-09-21 23:03:29.000000000 
+0200
+++ new/wlroots-0.19.2/types/output/output.c    2025-10-22 00:21:53.000000000 
+0200
@@ -745,7 +745,9 @@
        }
 
        output_apply_state(output, state);
+}
 
+void output_send_commit_event(struct wlr_output *output, const struct 
wlr_output_state *state) {
        struct timespec now;
        clock_gettime(CLOCK_MONOTONIC, &now);
        struct wlr_output_event_commit event = {
@@ -787,6 +789,7 @@
        }
 
        output_apply_commit(output, &pending);
+       output_send_commit_event(output, &pending);
 
        if (new_back_buffer) {
                wlr_buffer_unlock(pending.buffer);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/types/wlr_linux_drm_syncobj_v1.c 
new/wlroots-0.19.2/types/wlr_linux_drm_syncobj_v1.c
--- old/wlroots-0.19.1/types/wlr_linux_drm_syncobj_v1.c 2025-09-21 
23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/types/wlr_linux_drm_syncobj_v1.c 2025-10-22 
00:21:53.000000000 +0200
@@ -26,7 +26,7 @@
 };
 
 struct wlr_linux_drm_syncobj_surface_v1_commit {
-       struct wlr_linux_drm_syncobj_surface_v1 *surface;
+       struct wlr_surface *surface;
        struct wlr_drm_syncobj_timeline_waiter waiter;
        uint32_t cached_seq;
 
@@ -192,7 +192,7 @@
 }
 
 static void surface_commit_destroy(struct 
wlr_linux_drm_syncobj_surface_v1_commit *commit) {
-       wlr_surface_unlock_cached(commit->surface->surface, commit->cached_seq);
+       wlr_surface_unlock_cached(commit->surface, commit->cached_seq);
        wl_list_remove(&commit->surface_destroy.link);
        wlr_drm_syncobj_timeline_waiter_finish(&commit->waiter);
        free(commit);
@@ -237,7 +237,7 @@
                return false;
        }
 
-       commit->surface = surface;
+       commit->surface = surface->surface;
        commit->cached_seq = wlr_surface_lock_pending(surface->surface);
 
        commit->surface_destroy.notify = surface_commit_handle_surface_destroy;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/util/box.c 
new/wlroots-0.19.2/util/box.c
--- old/wlroots-0.19.1/util/box.c       2025-09-21 23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/util/box.c       2025-10-22 00:21:53.000000000 +0200
@@ -19,16 +19,15 @@
        //
        // In order to be consistent with e.g. wlr_box_contains_point(),
        // this function returns a point inside the bottom and right edges
-       // of the box by at least 1/65536 of a unit (pixel). 1/65536 is
+       // of the box by at least 1/256 of a unit (pixel). 1/256 is
        // small enough to avoid a "dead zone" with high-resolution mice
-       // but large enough to avoid rounding to zero (due to loss of
-       // significant digits) in simple floating-point calculations.
+       // but large enough to avoid rounding to zero in wl_fixed_from_double().
 
        // find the closest x point
        if (x < box->x) {
                *dest_x = box->x;
-       } else if (x > box->x + box->width - 1/65536.0) {
-               *dest_x = box->x + box->width - 1/65536.0;
+       } else if (x > box->x + box->width - 1/256.0) {
+               *dest_x = box->x + box->width - 1/256.0;
        } else {
                *dest_x = x;
        }
@@ -36,8 +35,8 @@
        // find closest y point
        if (y < box->y) {
                *dest_y = box->y;
-       } else if (y > box->y + box->height - 1/65536.0) {
-               *dest_y = box->y + box->height - 1/65536.0;
+       } else if (y > box->y + box->height - 1/256.0) {
+               *dest_y = box->y + box->height - 1/256.0;
        } else {
                *dest_y = y;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/xwayland/xwayland.c 
new/wlroots-0.19.2/xwayland/xwayland.c
--- old/wlroots-0.19.1/xwayland/xwayland.c      2025-09-21 23:03:29.000000000 
+0200
+++ new/wlroots-0.19.2/xwayland/xwayland.c      2025-10-22 00:21:53.000000000 
+0200
@@ -42,6 +42,9 @@
 static void xwayland_mark_ready(struct wlr_xwayland *xwayland) {
        assert(xwayland->server->wm_fd[0] >= 0);
        xwayland->xwm = xwm_create(xwayland, xwayland->server->wm_fd[0]);
+       // xwm_create takes ownership of wm_fd[0] under all circumstances
+       xwayland->server->wm_fd[0] = -1;
+
        if (!xwayland->xwm) {
                return;
        }
@@ -69,6 +72,11 @@
        struct wlr_xwayland *xwayland =
                wl_container_of(listener, xwayland, shell_destroy);
        xwayland->shell_v1 = NULL;
+       wl_list_remove(&xwayland->shell_destroy.link);
+       // Will remove this list in handle_shell_destroy().
+       // This ensures the link is always initialized and
+       // avoids the need to keep check conditions in sync.
+       wl_list_init(&xwayland->shell_destroy.link);
 }
 
 void wlr_xwayland_destroy(struct wlr_xwayland *xwayland) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wlroots-0.19.1/xwayland/xwm.c 
new/wlroots-0.19.2/xwayland/xwm.c
--- old/wlroots-0.19.1/xwayland/xwm.c   2025-09-21 23:03:29.000000000 +0200
+++ new/wlroots-0.19.2/xwayland/xwm.c   2025-10-22 00:21:53.000000000 +0200
@@ -2470,6 +2470,7 @@
 struct wlr_xwm *xwm_create(struct wlr_xwayland *xwayland, int wm_fd) {
        struct wlr_xwm *xwm = calloc(1, sizeof(*xwm));
        if (xwm == NULL) {
+               close(wm_fd);
                return NULL;
        }
 
@@ -2484,11 +2485,13 @@
 
        xwm->ping_timeout = 10000;
 
+       // xcb_connect_to_fd takes ownership of the FD regardless of 
success/failure
        xwm->xcb_conn = xcb_connect_to_fd(wm_fd, NULL);
 
        int rc = xcb_connection_has_error(xwm->xcb_conn);
        if (rc) {
                wlr_log(WLR_ERROR, "xcb connect failed: %d", rc);
+               xcb_disconnect(xwm->xcb_conn);
                free(xwm);
                return NULL;
        }

Reply via email to