summaryrefslogtreecommitdiffstats
path: root/server
Commit message (Collapse)AuthorAgeFilesLines
...
* server/tests: refactor CommandAlon Levy2012-05-033-16/+37
|
* server/tests: add test_get_width/test_get_heightAlon Levy2012-05-032-0/+19
|
* server/tests: refactor test_display_baseAlon Levy2012-05-031-34/+45
|
* server/red_worker/video: don't override the clip in areas that belong only ↵Yonit Halperin2012-05-031-30/+12
| | | | to sized frames
* server/red_worker.c/video: add support for frames of different sizesYonit Halperin2012-05-033-61/+166
| | | | | | | | | | | | rhbz #813826 When playing a youtube video on Windows guest, the driver sometimes(**) sends images which contain the video frames, but also other parts of the screen (e.g., the youtube process bar). In order to prevent glitches, we send these images as part of the stream, using SPICE_MSG_DISPLAY_STREAM_DATA_SIZED. (**) It happens regularly with the you tube html5 player. With flash, it occurs when moving the cursor in the player area.
* Update the spice-common submoduleYonit Halperin2012-05-031-2/+2
| | | | | | | | | spice-common changes: STREAM_DATA_SIZED message was added in order to support video streams with frames that their size is different from the initial size that the stream was created with. This patch also includes server and client adjustments to the new SpiceMsgDisplayStreamData.
* server/red_worker/video: don't detach a drawable from a stream due to it ↵Yonit Halperin2012-05-031-8/+8
| | | | | | | | | | | being rendered. The previous patch took care that streams will be upgraded by a surface screenshot and not the last frame, if necessary. Thus, there is no more a reason for detaching drawables from streams when they are rendered. Moreover, detaching such drawables can cause glitches, in case they are still in the pipe, and red_update_area is called frequently and leads to stream frames rendering.
* server/red_worker/video: upgrade stream by a screenshot instead of the last ↵Yonit Halperin2012-05-031-21/+71
| | | | | | | | frame, if needed Upgrading a stream: When the stream's visible region is bigger than the one of the last frame, we will send an updated screenshot of the visible region, instead of sending the last frame losslessly.
* server/red_worker/video: maintain visible region and clip region for streamsYonit Halperin2012-05-031-12/+27
| | | | | | | | | | | | | | | | | | | | | Differentiate between the clipping of the video stream, and the region that currently displays fragments of the video stream (henceforth, vis_region). The latter equals or contains the former one. For example, let c1 be the clip area at time t1, and c2 be the clip area at time t2, where t1 < t2. If c1 contains c2, and at least part of c1/c2, hasn't been covered by a non-video images, vis_region will contain c2, and also the part of c1/c2 that still displays fragments of the video. When we consider if a stream should be "upgraded" (1), due to its area being used by a rendering operation, or due to stopping the video, we should take into account the vis_region, and not the clip region (next patch: not upgrade by the last frame, but rather by vis_region). This fix will be more necessary when sized frames are introduced (see the following patches). Then, the vis_region might be larger than the last frame, and contain it, more frequently than before. (1) "upgrading a stream" stands for sending its last frame losslessly. Or more precisely, lossless resending of all the currently displayed lossy areas, that were sent as part of the stream.
* server/red_worker: add get_stream_idYonit Halperin2012-05-031-11/+16
|
* Force 64 bit multiplication on 32 bit systems; fixes a bug where the server ↵Jeremy White2012-04-271-1/+1
| | | | times out the display channel freakily fast.
* Add some more 'noreturn' annotationsDaniel P. Berrange2012-04-251-2/+4
| | | | | | | | Methods which longjump, unconditionally raise an exception, or call _exit() cannot return control to the caller so should be annotated with 'noreturn' Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Fix typo in is_equal_brushDaniel P. Berrange2012-04-251-1/+1
| | | | | | | The 3 part of the conditional in the is_equal_brush method compared the b1->u.color field to itself, instead of b2->u.color Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Ensure config.h is the first include in the fileDaniel P. Berrange2012-04-251-1/+1
| | | | Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Make some int->pointer casts explicitDaniel P. Berrange2012-04-251-2/+2
| | | | | | | | | Tell the compiler that was really do intend to cast from int to pointer, to prevent warnings about implicit casts * server/tests/test_display_base.c: Add explicit casts Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* VSCMsgHeader.reader_id is unsigned, so don't check for >= 0Daniel P. Berrange2012-04-251-2/+1
| | | | | | | * server/smartcard.c: Fix assertion to not check for >= 0 on unsigned variable Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Avoid jumping across variables declarations with initializersDaniel P. Berrange2012-04-251-1/+2
| | | | | | | | | | If a 'goto' statement jumps across a variable declaration which also has an initializer, the variable is in an undefined state. Splitting the the declaration & initialization doesn't change that, but the compiler can at least now detect use of the unintialized variable Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Convert cases of () to (void)Daniel P. Berrange2012-04-252-5/+5
| | | | | | * server/reds.c, server/smartcard.c: s/()/(void) Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Remove 2 *MB* stack frame in red_worker_mainDaniel P. Berrange2012-04-251-25/+25
| | | | | | | | | | The red_worker_main method allocates a RedWorker struct instance on the stack. This struct is a full 2 MB in size which is not at all resonable to allocate on the stack. * server/red_worker.c: Move RedWorker struct to the heap Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Mark some variables as volatileDaniel P. Berrange2012-04-251-3/+3
| | | | | | | | | | | | | | | | | | | | | | When using setjmp/longjmp the state of local variables can be undefined in certain scenarios: [quote man(longjmp)] The values of automatic variables are unspecified after a call to longjmp() if they meet all the following criteria: · they are local to the function that made the correspond‐ ing setjmp(3) call; · their values are changed between the calls to setjmp(3) and longjmp(); and · they are not declared as volatile. [/quote] * server/red_worker.c: Mark some vars as volatile Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Mark functions which never return controlDaniel P. Berrange2012-04-251-3/+2
| | | | | | | | * client/red_channel.cpp: AbortTrigger::on_event can't return given its current impl * server/red_worker.c: red_worker_main can't return Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Fix multiple printf format problemsDaniel P. Berrange2012-04-252-9/+9
| | | | | | | | | | | | | | | | All printf var-args style methods should be annotation with their format. All format strings must be const strings. * client/application.cpp, client/cmd_line_parser.cpp, client/hot_keys.cpp: Avoid non-const format * client/client_net_socket.cpp: Fix broken format specifier * client/red_peer.cpp: Fix missing format specifier * client/platform.h: Add SPICE_GNUC_PRINTF annotation to term_printf * client/utils.h: Add SPICE_GNUC_PRINTF annotation to string_printf * server/glz_encoder_config.h, server/red_worker.c: Add SPICE_GNUC_PRINTF annotation to warning callbacks Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Fix const-ness violationsDaniel P. Berrange2012-04-252-3/+3
| | | | | | | * server/red_worker.c: Add missing const for return type * server/reds.c: Static strings must be declared const Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* Don't do arithmetic on void * type, use uint8_t insteadDaniel P. Berrange2012-04-251-6/+6
| | | | | | | | Arithmetic on void * types is non-portable & trivially avoided * server/dispatcher.c: Use uint8_t for arithmetic Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
* fix error-path return in snd_set_record_peer()Michael Tokarev2012-04-181-2/+2
| | | | | | The error_{1,2} labels in this functions are backwards. Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
* server: allow failure in getvirtAlon Levy2012-04-055-89/+240
| | | | | | | This patch changed getvirt to continue working even if spice_critical doesn't abort (i.e. SPICE_ABORT_LEVEL != -1). This is in preparation to make getvirt not abort at all. The reason is that getvirt is run on guest provided memory, so a bad driver can crash the vm.
* server: export spice_server_is_server_mouse predicateAlon Levy2012-03-263-1/+13
| | | | To be used by qemu query-spice / info spice commands.
* Use the spice-common logging functionsMarc-André Lureau2012-03-2520-908/+906
| | | | | It will abort by default for critical level messages. That behaviour can be tuned at runtime.
* Use the spice-common submoduleMarc-André Lureau2012-03-2521-101/+117
| | | | | | | | | | | | | | | | | | This patch will replace the common/ directory with the spice-common project. It is for now a simple project subdirectory shared with spice-gtk, but the goal is to make it a proper library later on. With this change, the spice-server build is broken. The following commits fix the build, and have been seperated to ease the review. v2 - moves all the generated marshallers to spice-common library - don't attempt to fix windows VS build, which should somehow be splitted with spice-common (or built from tarball only to avoid generation tools/libs deps) v3 - uses libspice-common-client - fix a mutex.h inclusion reported by Alon
* sasl: small refactoring, check memcheck != NULLMarc-André Lureau2012-03-231-10/+8
|
* Use spice_strdup() to avoid crashing on NULLMarc-André Lureau2012-03-233-10/+10
| | | | | qemu can call spice_server_set_name(s, NULL) when the name is not given. Let's not crash in this case
* server/tests: add resolution changes testerAlon Levy2012-03-222-6/+80
|
* server/tests/test_display_base: add CommandAlon Levy2012-03-222-45/+101
| | | | add parameters to the commands used for display tests.
* server/tests/test_display_base: remove 64bit arch assumptionsAlon Levy2012-03-211-5/+5
|
* server/red_memslots: don't assume 64 bit environmentAlon Levy2012-03-212-7/+10
| | | | | | assumption that unsigned long == QXLPHYSICAL causes get_virt to compute the wrong slot. Fix by replacing addr variables to be of type QXLPHYSICAL.
* server/red_worker: fix for case where ASSERT is compiled outAlon Levy2012-03-211-2/+1
|
* server/red_memslots: use QXLPHYSICAL for addressesAlon Levy2012-03-212-3/+3
| | | | | Cannot assume unsigned long == QXLPHYSICAL, not true for 32 bit architectures.
* server/red_memslots: drop two unused functionsAlon Levy2012-03-212-19/+0
| | | | | | | | | | | | | | cb_get_virt and cb_validate_virt have disappeared a long time ago, not needed since: commit 5ac88aa79fa6445f96e5419d8bf4fce81da63b90 Author: Gerd Hoffmann <kraxel@redhat.com> Date: Thu Jul 1 17:55:33 2010 +0200 Properly parse QXLImage to the new-world SpiceImage SpiceImage now replaces RedImage and has all image types in it. All image data are now chunked (and as such not copied when demarshalling).
* server/red_worker: don't typedef SpiceWatch twiceAlon Levy2012-03-201-2/+2
| | | | First defined in spice.h, fixes build failure with gcc 4.4.6
* red_worker: Check for NULL watchesHans de Goede2012-03-131-2/+13
| | | | | | | | If we run out of watches slots, we return NULL from watch_add, which means that the other watch_foo functions may get called with a NULL parameter, protect them against this. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* server: remove superfluous checkNahum Shalman2012-03-121-3/+0
| | | | no need to duplicate the check that the fd isn't -1
* server: listen on a pre-opened file descriptorNahum Shalman2012-03-123-0/+23
| | | | | | | Allow applications to pre-open a file descriptor and have spice listen on it. Thanks to Daniel Berrange for his comments
* server: don't fail on ENOPROTOOPT from setsockoptNahum Shalman2012-03-122-2/+2
| | | | | | If we allow listening on arbitrary sockets like unix sockets, we can get ENOPROTOOPT errors from setsockopt calls that set TCP specific options. This should be allowed to happen.
* red_channel: remove pre_disconnect hookHans de Goede2012-03-122-4/+0
| | | | | | Now that red_worker's EventListener is gone there are no more users of it. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* red_worker: Rework poll code to use the watch interfaceHans de Goede2012-03-121-91/+79
| | | | | | | | | | | | | | | | | | | | | | | | | Commit 143a1df24e83e9c1e173c16aeb76d61ffdce9598 changed red_worker_main from epoll to poll. But epoll has edge triggered semantics (when requested and we requested them), where as poll is always level triggered. And red_worker was relying on the edge triggered semantics, as it was always polling for POLLOUT, which, when edge triggered, would only cause poll to register an event after we had blocked on a write. But after the switch to regular poll, with its level triggered semantics, the POLLOUT condition would almost always be true, causing red_worker_main to not block on the poll and burn CPU as fast as it can as soon as a client was connected. Luckily we already have a mechanism to switch from polling for read only to polling for read+write and back again in the form of watches. So this patch changes the red_worker dummy watch implementation into a proper watch implementation, and drops the entire EventListener concept since that then is no longer needed. This fixes spice-server using 400% CPU on my quad core machine as soon as a client was connected to a multi head vm, and as an added bonus is a nice cleanup IMHO. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* red_channel: Use the channel core to remove the stream watch on disconnectHans de Goede2012-03-121-0/+4
| | | | | | | | | | | | | | | | | We allow channels to have different core implementations, but we were relying on reds_stream_free to remove the stream watch on disconnect, and reds_stream_free always uses the qemu core implementation. So far we were getting away with this since all the alternative core implementations always return NULL from watch_add. But: 1) The code before this patch clearly was not correct, since it was matching a channel-core watch_add with a qemu-core watch_remove 2) I plan to move red_worker over to actually using an alternative watch implementation at which point this becomes a real problem Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* red_worker: Remove ref counting from the EventListener structHans de Goede2012-03-101-34/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The red_worker EventListener struct is either embedded in one of: 1) DisplayChannelClient 2) CursorChannelClient 3) RedWorker And as such gets destroyed when these get destroyed, in case 1 & 2 through a call to red_channel_client_destroy(). So free-ing it when the ref-count becomes 0 is wrong, for cases: 1) and 2) this will lead to a double free; 3) this will lead to passing memory to free which was not returned by malloc. This is not causing any issues as the ref-count never gets decremented, other then in red_worker_main where it gets incremented before it gets decremented, so it never becomes 0. So we might just as well completely remove it. Notes: 1) This is mainly a preparation patch for fixing issues introduced by the move from epoll to poll 2) Since removing the ref-counting removes the one code path where listeners would get set to NULL, this patch moves the setting of NULL to pre_disconnect, where it should have been done in the first place since red_client_destroy calls red_channel_client_disconnect (through the dispatcher) followed by red_channel_client_destroy, so after pre_disconnect the listener may be gone. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* Ensure all members of ChannelCbs and ClientCbs are either assigned or NULLHans de Goede2012-03-109-21/+15
| | | | | | | | | | | | | | | While git-bisecting another issue I ended up hitting and not recognizing the bug fixed by commit 7a079b452b026d6ce38f95dcc397fa64b059fffb. While fixing this (again) I noticed that (even after the fix) not all users of ChannelCbs first zero it. So this patch ensures that all users of ChannelCbs first zero it, and does the same for ClientCbs while at it. Since before this patch there were multiple zero-ing styles, some using memset and other using a zero initializer this patch also unifies all the zero-ing to use a NULL initializer for the first element. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* server/red_worker: fix use after free for listenersAlon Levy2012-03-061-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a core dumped observed once by repeated migration. So far 100 migrations and no recurrence. Core was generated by `/home/alon/spice/upstream/bin/qemu-system-x86_64 --enable-kvm -qmp unix:/tmp/mi'. Program terminated with signal 11, Segmentation fault. 11197 if (evt_listener && evt_listener->refs > 1) { Missing separate debuginfos, use: debuginfo-install bluez-libs-4.98-3.fc17.x86_64 brlapi-0.5.6-4.fc17.x86_64 bzip2-libs-1.0.6-4.fc17.x86_64 cryptopp-5.6.1-6.fc17.x86_64 keyutils-libs-1.5.5-2.fc17.x86_64 libssh2-1.4.0-1.fc17.x86_64 nss-softokn-freebl-3.13.1-20.fc17.x86_64 xen-libs-4.1.2-11.fc17.x86_64 xz-libs-5.1.1-2alpha.fc17.x86_64 (gdb) bt (gdb) l 11192 for (i = 0; i < MAX_EVENT_SOURCES; i++) { 11193 struct pollfd *pfd = worker.poll_fds + i; 11194 if (pfd->revents) { 11195 EventListener *evt_listener = worker.listeners[i]; 11196 11197 if (evt_listener && evt_listener->refs > 1) { 11198 evt_listener->action(evt_listener, pfd); 11199 if (--evt_listener->refs) { 11200 continue; 11201 } (gdb) p evt_listener $1 = (EventListener *) 0x7f15a9a5d1e0 (gdb) p *evt_listener Cannot access memory at address 0x7f15a9a5d1e0 (gdb) p i $2 = 2 (gdb) p worker.listeners $3 = {0x7f15bc832520, 0x7f15a406e1a0, 0x7f15a9a5d1e0, 0x0 <repeats 17 times>}
* Send name & uuid to capable clientsMarc-André Lureau2012-03-056-1/+99
| | | | | | | | | Add spice_server_set_name() and spice_server_set_uuid() that allows the client to identify a Spice server (useful to associate settings with a particular server) The SPICE_MSG_MAIN_NAME and SPICE_MSG_MAIN_UUID messages are only sent to capable clients, announcing SPICE_MAIN_CAP_NAME_AND_UUID.