Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wayvnc for openSUSE:Factory checked 
in at 2026-09-28 10:48:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wayvnc (Old)
 and      /work/SRC/openSUSE:Factory/.wayvnc.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wayvnc"

Mon Sep 28 10:48:27 2026 rev:14 rq:1381073 version:0.10.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/wayvnc/wayvnc.changes    2026-07-10 
17:42:56.496550457 +0200
+++ /work/SRC/openSUSE:Factory/.wayvnc.new.383539/wayvnc.changes        
2026-09-28 10:49:30.997654914 +0200
@@ -1,0 +2,11 @@
+Mon Sep 28 06:20:38 UTC 2026 - Michael Vetter <[email protected]>
+
+- Update to 0.10.2:
+  * main: Point VNC display to correct image source on switch
+  * ctl-server: Flush on stop
+  * main: Add image_source NULL check in client_destroy
+  * ctl-client: Stop reconnect loop when no longer waiting for events
+  * main: Clear display image source when no outputs left
+  * main: Clear self->nvnc on init failure
+
+-------------------------------------------------------------------

Old:
----
  v0.10.1.tar.gz

New:
----
  v0.10.2.tar.gz

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

Other differences:
------------------
++++++ wayvnc.spec ++++++
--- /var/tmp/diff_new_pack.8lfJBC/_old  2026-09-28 10:49:31.649682232 +0200
+++ /var/tmp/diff_new_pack.8lfJBC/_new  2026-09-28 10:49:31.650682274 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           wayvnc
-Version:        0.10.1
+Version:        0.10.2
 Release:        0
 Summary:        A VNC server for wlroots based Wayland compositors
 License:        ISC

++++++ v0.10.1.tar.gz -> v0.10.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayvnc-0.10.1/meson.build 
new/wayvnc-0.10.2/meson.build
--- old/wayvnc-0.10.1/meson.build       2026-07-09 20:45:45.000000000 +0200
+++ new/wayvnc-0.10.2/meson.build       2026-09-25 11:13:14.000000000 +0200
@@ -1,7 +1,7 @@
 project(
        'wayvnc',
        'c',
-       version: '0.10.1',
+       version: '0.10.2',
        license: 'ISC',
        default_options: [
                'c_std=gnu11',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayvnc-0.10.1/src/ctl-client.c 
new/wayvnc-0.10.2/src/ctl-client.c
--- old/wayvnc-0.10.1/src/ctl-client.c  2026-07-09 20:45:45.000000000 +0200
+++ new/wayvnc-0.10.2/src/ctl-client.c  2026-09-25 11:13:14.000000000 +0200
@@ -633,11 +633,14 @@
 static int block_until_reconnect(struct ctl_client* self,
                struct jsonipc_request* request)
 {
-       while (ctl_client_reconnect_event_loop(self, request) != 0)
+       while (ctl_client_reconnect_event_loop(self, request) != 0) {
+               if (!self->wait_for_events)
+                       return -1;
                if (usleep(50000) == -1) {
                        DEBUG("Interrupted waiting for the IPC socket");
                        return -1;
                }
+       }
 
        return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayvnc-0.10.1/src/ctl-server.c 
new/wayvnc-0.10.2/src/ctl-server.c
--- old/wayvnc-0.10.1/src/ctl-server.c  2026-07-09 20:45:45.000000000 +0200
+++ new/wayvnc-0.10.2/src/ctl-server.c  2026-09-25 11:13:14.000000000 +0200
@@ -552,11 +552,15 @@
        return response;
 }
 
+static bool client_has_pending_output(struct ctl_client* self)
+{
+       return json_array_size(self->response_queue) > 0 || self->write_len;
+}
+
 static void client_set_aml_event_mask(struct ctl_client* self)
 {
        int mask = AML_EVENT_READ;
-       if (json_array_size(self->response_queue) > 0 ||
-                       self->write_len)
+       if (client_has_pending_output(self))
                mask |= AML_EVENT_WRITE;
        aml_set_event_mask(self->handler, mask);
 }
@@ -638,7 +642,8 @@
        return result;
 }
 
-static void send_ready(struct ctl_client* client)
+// Returns the number of bytes sent, or -1 on error
+static ssize_t client_send(struct ctl_client* client)
 {
        if (client->write_buffer) {
                nvnc_trace("Continuing partial write (%d left)", 
client->write_len);
@@ -656,39 +661,53 @@
                nvnc_trace("Nothing to send");
        }
        if (!client->write_ptr)
-               goto no_data;
+               return 0;
        ssize_t n = send(client->fd, client->write_ptr, client->write_len,
                        MSG_NOSIGNAL|MSG_DONTWAIT);
        if (n == -1) {
                if (errno == EAGAIN || errno == EWOULDBLOCK) {
                        nvnc_trace("send: EAGAIN");
-                       goto send_eagain;
+                       return 0;
                }
                nvnc_log(NVNC_LOG_ERROR, "Could not send response: %m");
-               client_destroy(client);
-               return;
+               return -1;
        }
        nvnc_trace("sent %d/%d bytes", n, client->write_len);
        client->write_ptr += n;
        client->write_len -= n;
-send_eagain:
        if (client->write_len == 0) {
                nvnc_trace("Write buffer empty!");
                free(client->write_buffer);
                client->write_buffer = NULL;
                client->write_ptr = NULL;
-               if (client->drop_after_next_send) {
-                       nvnc_log(NVNC_LOG_WARNING, "Intentional disconnect");
-                       client_destroy(client);
-                       return;
-               }
        } else {
                nvnc_trace("Write buffer has %d remaining", client->write_len);
        }
-no_data:
+       return n;
+}
+
+static void send_ready(struct ctl_client* client)
+{
+       ssize_t n = client_send(client);
+       if (n < 0) {
+               client_destroy(client);
+               return;
+       }
+       if (n > 0 && !client->write_buffer && client->drop_after_next_send) {
+               nvnc_log(NVNC_LOG_WARNING, "Intentional disconnect");
+               client_destroy(client);
+               return;
+       }
        client_set_aml_event_mask(client);
 }
 
+static void client_flush(struct ctl_client* client)
+{
+       while (client_has_pending_output(client))
+               if (client_send(client) <= 0)
+                       break;
+}
+
 static void recv_ready(struct ctl_client* client)
 {
        struct ctl* server = client->server;
@@ -918,8 +937,10 @@
        aml_unref(self->handler);
        struct ctl_client* client;
        struct ctl_client* tmp;
-       wl_list_for_each_safe(client, tmp, &self->clients, link)
+       wl_list_for_each_safe(client, tmp, &self->clients, link) {
+               client_flush(client);
                client_destroy(client);
+       }
        close(self->fd);
        unlink(self->socket_path);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayvnc-0.10.1/src/main.c new/wayvnc-0.10.2/src/main.c
--- old/wayvnc-0.10.1/src/main.c        2026-07-09 20:45:45.000000000 +0200
+++ new/wayvnc-0.10.2/src/main.c        2026-09-25 11:13:14.000000000 +0200
@@ -198,6 +198,8 @@
                struct wayvnc_client* client);
 static bool wayvnc_desktop_display_add(struct wayvnc* self,
                struct image_source* image_source);
+static struct wayvnc_display *wayvnc_display_find_by_source(struct wayvnc* 
self,
+               struct image_source *source);
 
 struct wayland* wayland = NULL;
 
@@ -268,6 +270,11 @@
                        out == output_from_image_source(self->image_source)) {
                if (self->start_detached) {
                        nvnc_log(NVNC_LOG_WARNING, "No fallback outputs left. 
Detaching...");
+                       struct wayvnc_display* display =
+                               wayvnc_display_find_by_source(self,
+                                               self->image_source);
+                       assert(display);
+                       display->image_source = NULL;
                        self->image_source = NULL;
                        schedule_wayland_detach(self);
                } else {
@@ -1306,6 +1313,7 @@
 auth_failure:
        wayvnc_display_list_deinit(&self->wayvnc_displays);
        nvnc_del(self->nvnc);
+       self->nvnc = NULL;
        return -1;
 }
 
@@ -1731,7 +1739,8 @@
        if (wayvnc->nr_clients == 0 && wayland) {
                nvnc_log(NVNC_LOG_INFO, "Stopping screen capture");
                screencopy_stop(wayvnc->screencopy);
-               image_source_release_power_on(wayvnc->image_source);
+               if (wayvnc->image_source)
+                       image_source_release_power_on(wayvnc->image_source);
                stop_performance_ticker(wayvnc);
        }
 
@@ -2196,9 +2205,16 @@
                                        output_get_name(output));
                        return;
                }
+
                screencopy_stop(self->screencopy);
                output_release_power_on(current_output);
+
+               struct wayvnc_display *display =
+                       wayvnc_display_find_by_source(self, self->image_source);
+               assert(display);
+               display->image_source = &output->image_source;
        }
+
        set_image_source(self, &output->image_source);
        configure_screencopy(self);
        reinitialise_pointers(self);

Reply via email to