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);
