Commit 2624bab8 authored by Daniel P. Berrange's avatar Daniel P. Berrange Committed by Anthony Liguori

Remove support for non-threaded VNC server

QEMU now has a fundamental requirement for pthreads, so there
is no compelling reason to retain support for the non-threaded
VNC server. Remove the --{enable,disable}-vnc-thread configure
arguments, and all CONFIG_VNC_THREAD conditionals
Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent a307beb6
......@@ -134,7 +134,6 @@ vnc_tls=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
vnc_thread="no"
xen=""
xen_ctrl_version=""
xen_pci_passthrough=""
......@@ -667,10 +666,6 @@ for opt do
;;
--enable-vnc-png) vnc_png="yes"
;;
--disable-vnc-thread) vnc_thread="no"
;;
--enable-vnc-thread) vnc_thread="yes"
;;
--disable-slirp) slirp="no"
;;
--disable-uuid) uuid="no"
......@@ -3024,7 +3019,6 @@ if test "$vnc" = "yes" ; then
echo "VNC SASL support $vnc_sasl"
echo "VNC JPEG support $vnc_jpeg"
echo "VNC PNG support $vnc_png"
echo "VNC thread $vnc_thread"
fi
if test -n "$sparc_cpu"; then
echo "Target Sparc Arch $sparc_cpu"
......@@ -3200,9 +3194,6 @@ if test "$vnc_png" = "yes" ; then
echo "CONFIG_VNC_PNG=y" >> $config_host_mak
echo "VNC_PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
fi
if test "$vnc_thread" = "yes" ; then
echo "CONFIG_VNC_THREAD=y" >> $config_host_mak
fi
if test "$fnmatch" = "yes" ; then
echo "CONFIG_FNMATCH=y" >> $config_host_mak
fi
......
......@@ -4,11 +4,7 @@ vnc-obj-y += vnc-enc-tight.o vnc-palette.o
vnc-obj-y += vnc-enc-zrle.o
vnc-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o
vnc-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o
ifdef CONFIG_VNC_THREAD
vnc-obj-y += vnc-jobs-async.o
else
vnc-obj-y += vnc-jobs-sync.o
endif
vnc-obj-y += vnc-jobs.o
common-obj-y += keymaps.o
common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
......
/*
* QEMU VNC display driver
*
* Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
* Copyright (C) 2006 Fabrice Bellard
* Copyright (C) 2009 Red Hat, Inc
* Copyright (C) 2010 Corentin Chary <corentin.chary@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "vnc.h"
#include "vnc-jobs.h"
void vnc_jobs_clear(VncState *vs)
{
}
void vnc_jobs_join(VncState *vs)
{
}
VncJob *vnc_job_new(VncState *vs)
{
vs->job.vs = vs;
vs->job.rectangles = 0;
vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE);
vnc_write_u8(vs, 0);
vs->job.saved_offset = vs->output.offset;
vnc_write_u16(vs, 0);
return &vs->job;
}
void vnc_job_push(VncJob *job)
{
VncState *vs = job->vs;
vs->output.buffer[job->saved_offset] = (job->rectangles >> 8) & 0xFF;
vs->output.buffer[job->saved_offset + 1] = job->rectangles & 0xFF;
vnc_flush(job->vs);
}
int vnc_job_add_rect(VncJob *job, int x, int y, int w, int h)
{
int n;
n = vnc_send_framebuffer_update(job->vs, x, y, w, h);
if (n >= 0)
job->rectangles += n;
return n;
}
bool vnc_has_job(VncState *vs)
{
return false;
}
......@@ -38,51 +38,35 @@ bool vnc_has_job(VncState *vs);
void vnc_jobs_clear(VncState *vs);
void vnc_jobs_join(VncState *vs);
#ifdef CONFIG_VNC_THREAD
void vnc_jobs_consume_buffer(VncState *vs);
void vnc_start_worker_thread(void);
bool vnc_worker_thread_running(void);
void vnc_stop_worker_thread(void);
#endif /* CONFIG_VNC_THREAD */
/* Locks */
static inline int vnc_trylock_display(VncDisplay *vd)
{
#ifdef CONFIG_VNC_THREAD
return qemu_mutex_trylock(&vd->mutex);
#else
return 0;
#endif
}
static inline void vnc_lock_display(VncDisplay *vd)
{
#ifdef CONFIG_VNC_THREAD
qemu_mutex_lock(&vd->mutex);
#endif
}
static inline void vnc_unlock_display(VncDisplay *vd)
{
#ifdef CONFIG_VNC_THREAD
qemu_mutex_unlock(&vd->mutex);
#endif
}
static inline void vnc_lock_output(VncState *vs)
{
#ifdef CONFIG_VNC_THREAD
qemu_mutex_lock(&vs->output_mutex);
#endif
}
static inline void vnc_unlock_output(VncState *vs)
{
#ifdef CONFIG_VNC_THREAD
qemu_mutex_unlock(&vs->output_mutex);
#endif
}
#endif /* VNC_JOBS_H */
......@@ -526,7 +526,6 @@ static void vnc_desktop_resize(VncState *vs)
vnc_flush(vs);
}
#ifdef CONFIG_VNC_THREAD
static void vnc_abort_display_jobs(VncDisplay *vd)
{
VncState *vs;
......@@ -545,11 +544,6 @@ static void vnc_abort_display_jobs(VncDisplay *vd)
vnc_unlock_output(vs);
}
}
#else
static void vnc_abort_display_jobs(VncDisplay *vd)
{
}
#endif
static void vnc_dpy_resize(DisplayState *ds)
{
......@@ -867,19 +861,12 @@ static int find_and_clear_dirty_height(struct VncState *vs,
return h;
}
#ifdef CONFIG_VNC_THREAD
static int vnc_update_client_sync(VncState *vs, int has_dirty)
{
int ret = vnc_update_client(vs, has_dirty);
vnc_jobs_join(vs);
return ret;
}
#else
static int vnc_update_client_sync(VncState *vs, int has_dirty)
{
return vnc_update_client(vs, has_dirty);
}
#endif
static int vnc_update_client(VncState *vs, int has_dirty)
{
......@@ -1066,11 +1053,9 @@ static void vnc_disconnect_finish(VncState *vs)
qemu_remove_led_event_handler(vs->led);
vnc_unlock_output(vs);
#ifdef CONFIG_VNC_THREAD
qemu_mutex_destroy(&vs->output_mutex);
qemu_bh_delete(vs->bh);
buffer_free(&vs->jobs_buffer);
#endif
for (i = 0; i < VNC_STAT_ROWS; ++i) {
g_free(vs->lossy_rect[i]);
......@@ -1286,14 +1271,12 @@ static long vnc_client_read_plain(VncState *vs)
return ret;
}
#ifdef CONFIG_VNC_THREAD
static void vnc_jobs_bh(void *opaque)
{
VncState *vs = opaque;
vnc_jobs_consume_buffer(vs);
}
#endif
/*
* First function called whenever there is more data to be read from
......@@ -2699,10 +2682,8 @@ static void vnc_connect(VncDisplay *vd, int csock, int skipauth)
vs->as.fmt = AUD_FMT_S16;
vs->as.endianness = 0;
#ifdef CONFIG_VNC_THREAD
qemu_mutex_init(&vs->output_mutex);
vs->bh = qemu_bh_new(vnc_jobs_bh, vs);
#endif
QTAILQ_INSERT_HEAD(&vd->clients, vs, next);
......@@ -2762,10 +2743,8 @@ void vnc_display_init(DisplayState *ds)
if (!vs->kbd_layout)
exit(1);
#ifdef CONFIG_VNC_THREAD
qemu_mutex_init(&vs->mutex);
vnc_start_worker_thread();
#endif
dcl->dpy_copy = vnc_dpy_copy;
dcl->dpy_update = vnc_dpy_update;
......
......@@ -29,9 +29,7 @@
#include "qemu-common.h"
#include "qemu-queue.h"
#ifdef CONFIG_VNC_THREAD
#include "qemu-thread.h"
#endif
#include "console.h"
#include "monitor.h"
#include "audio/audio.h"
......@@ -146,9 +144,7 @@ struct VncDisplay
DisplayState *ds;
kbd_layout_t *kbd_layout;
int lock_key_sync;
#ifdef CONFIG_VNC_THREAD
QemuMutex mutex;
#endif
QEMUCursor *cursor;
int cursor_msize;
......@@ -216,7 +212,6 @@ typedef struct VncZywrle {
int buf[VNC_ZRLE_TILE_WIDTH * VNC_ZRLE_TILE_HEIGHT];
} VncZywrle;
#ifdef CONFIG_VNC_THREAD
struct VncRect
{
int x;
......@@ -238,14 +233,6 @@ struct VncJob
QLIST_HEAD(, VncRectEntry) rectangles;
QTAILQ_ENTRY(VncJob) next;
};
#else
struct VncJob
{
VncState *vs;
int rectangles;
size_t saved_offset;
};
#endif
struct VncState
{
......@@ -300,13 +287,9 @@ struct VncState
QEMUPutLEDEntry *led;
bool abort;
#ifndef CONFIG_VNC_THREAD
VncJob job;
#else
QemuMutex output_mutex;
QEMUBH *bh;
Buffer jobs_buffer;
#endif
/* Encoding specific, if you add something here, don't forget to
* update vnc_async_encoding_start()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment