summaryrefslogtreecommitdiffstats
path: root/server/red_dispatcher.c
Commit message (Collapse)AuthorAgeFilesLines
* spice_server_vm_start/stop: notify red_dispatcher on vm start/stopYonit Halperin2012-08-271-0/+22
| | | | | | | Till now, red_worker was notfied about vm status changes via QXLWorker->start/stop (or spice_qxl_start/stop). Newer qemu, that supports calling spice_server_vm_start/stop, will call only these routines, and won't call QXLWorker->start/stop.
* server: add monitors_config supportAlon Levy2012-07-221-0/+25
| | | | | | | | | | | | | | | | a SpiceMsgDisplayMonitorsConfig is sent on two occasions: * as a result of a spice_qxl_monitors_config_async * whenever a client connects and there is a previously set monitors config Sending the new message is protected by a new cap, SPICE_DISPLAY_CAP_MONITORS_CONFIG More elaborately: spice_qxl_monitors_config_async receives a QXLPHYSICAL address of a QXLMonitorsConfig struct and reads it, caching it in the RedWorker, and sending it to all clients. Whenever a new client connects it receives a SpiceMsgDisplayMonitorsConfig message as well.
* Use the spice-common logging functionsMarc-André Lureau2012-03-251-22/+15
| | | | | It will abort by default for critical level messages. That behaviour can be tuned at runtime.
* Use the spice-common submoduleMarc-André Lureau2012-03-251-1/+2
| | | | | | | | | | | | | | | | | | 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
* Ensure all members of ChannelCbs and ClientCbs are either assigned or NULLHans de Goede2012-03-101-1/+1
| | | | | | | | | | | | | | | 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: pass remote caps to display/cursor red_channel_client'sYonit Halperin2012-01-121-0/+16
|
* server/red_worker: reuse dispatcherAlon Levy2011-11-081-211/+276
| | | | | | | | | | | | | | | | | | | | | | This patch reuses Dispatcher in RedDispatcher. It adds two helpers to red_worker to keep RedWorker opaque to the outside. The dispatcher is abused in three places that use the underlying socket directly: once sending a READY after red_init completes once for each channel creation, replying with the RedChannel instance for cursor and display. FDO Bugzilla: 42463 rfc->v1: * move callbacks to red_worker.c including registration (Yonit) * rename dispatcher to red_dispatcher in red_worker.c and red_dispatcher.c * add accessor red_dispatcher_get_dispatcher * s/dispatcher_handle_recv/dispatcher_handle_recv_read/ and change sig to just Dispatcher *dispatcher (was the SpiceCoreInterface one) * remove SpiceCoreInterface parameter from dispatcher_init (Yonit) * main_dispatcher needed it for channel_event so it has it in struct MainDispatcher * add dispatcher_get_recv_fd for red_worker
* server/red_dispatcher: remove semicolon from DBG_ASYNCAlon Levy2011-11-071-1/+1
|
* server: add prefix argument to red_printf_debugAlon Levy2011-11-071-5/+12
| | | | | printed before function name. No central location for prefixes. Adding "WORKER", "ASYNC", "MAIN" since those were the current users.
* server/red_dispatcher: support concurrent asyncsAlon Levy2011-11-071-61/+56
| | | | | | | | | | | | | | | This is part of the dispatcher update, extracting the dispatcher routine from red_dispatcher and main_dispatcher into dispatcher. Supporting multiple async operations will make it natural to support async monitor commands and async guest io requests that could overlap in time. Use a Ring for AsyncCommands. Free Desktop Bugzilla: 42463 Related FD: 41622
* fix inverted memset parametersChristophe Fergeau2011-08-251-1/+1
| | | | Issue found by the Coverity scanner.
* server: registering RedChannel in reds, instead of ChannelYonit Halperin2011-08-231-64/+99
| | | | | | | | | | | | | | | | | | | | | | | Merging the functionality of reds::channel, into RedChannel. In addition, cleanup and fix disconnection code: before this patch, red_dispatcher_disconnect_display_client could have been called from the red_worker thread (and it must be called only from the io thread). RedChannel holds only connected channel clients. RedClient holds all the channel clients that were created till it is destroyed (and then it destroys them as well). Note: snd_channel still doesn't use red_channel, however it creates dummy channel and channel clients, in order to register itself in reds. server/red_channel.c: a channel is connected if it holds at least one channel client Previously I changed RedChannel to hold only connected channel clients and RedClient, to hold all the channel clients as long as it is not destroyed. usbredir: multichannel has not been tested, it just compiles.
* server: Add RedClientAlon Levy2011-08-231-2/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That means RedClient tracks a ring of channels. Right now there will be only a single client because of the disconnection mechanism - whenever a new client comes we disconnect all existing clients. But this patch adds already a ring of clients to reds.c (stored in RedServer). There is a known problem handling many connections and disconnections at the same time, trigerrable easily by the following script: export NEW_DISPLAY=:3.0 Xephyr $NEW_DISPLAY -noreset & for ((i = 0 ; i < 5; ++i)); do for ((j = 0 ; j < 10; ++j)); do DISPLAY=$NEW_DISPLAY c_win7x86_qxl_tests & done sleep 2; done I fixed a few of the problems resulting from this in the same patch. This required already introducing a few other changes: * make sure all removal of channels happens in the main thread, for that two additional dispatcher calls are added to remove a specific channel client (RED_WORKER_MESSAGE_CURSOR_DISCONNECT_CLIENT and RED_WORKER_MESSAGE_DISPLAY_DISCONNECT_CLIENT). * change some asserts in input channel. * make main channel disconnect not recursive * introduce disconnect call back to red_channel_create_parser The remaining abort is from a double free in the main channel, still can't find it (doesn't happen when running under valgrind - probably due to the slowness resulting from that), but is easy to see when running under gdb.
* server/red_dispatcher: fix wrong resolution set for tabletAlon Levy2011-07-311-4/+4
| | | | | | | | | | | when changing resolutions due to the new async code paths the surface creation command was kept by reference, and later, when the red_worker signaled completion by calling async_complete the mouse mode was updated using the reference. This caused the wrong values to be read resulting in wrong resolutions set and a non working mouse pointer. Fix this by keeping a copy of the surface creation command instead of a reference. No bz. Found in testing.
* server: add QXLWorker.flush_surfaces_async for S3/S4 supportAlon Levy2011-07-201-0/+20
| | | | | | | | | | | This does the following, all to remove any referenced memory on the pci bars: flush_all_qxl_commands(worker); flush_all_surfaces(worker); red_wait_outgoing_item((RedChannel *)worker->display_channel); red_wait_outgoing_item((RedChannel *)worker->cursor_channel); The added api is specifically async, i.e. it calls async_complete when done.
* server: add async io supportAlon Levy2011-07-201-40/+215
| | | | | | | | | | | | | | | | | | | | | | | | | | | The new _ASYNC io's in qxl_dev listed at the end get six new api functions, and an additional callback function "async_complete". When the async version of a specific io is used, completion is notified by calling async_complete, and no READY message is written or expected by the dispatcher. update_area has been changed to push QXLRects to the worker thread, where the conversion to SpiceRect takes place. A cookie has been added to each async call to QXLWorker, and is passed back via async_complete. Added api: QXLWorker: update_area_async add_memslot_async destroy_surfaces_async destroy_primary_surface_async create_primary_surface_async destroy_surface_wait_async QXLInterface: async_complete
* server: api: add spice_qxl_* calls based on QXLWorker contentsAlon Levy2011-07-201-32/+191
| | | | | | | | | For each callback in QXLWorker, for example QXLWorker::update_area, add a direct call named spice_qxl_update_area. This will (a) remove the pointless indirection and (b) make shared library versioning alot easier as we'll get new linker symbols which we can tag with the version they appeared in the shared library.
* add missing staticChristophe Fergeau2011-05-031-2/+3
|
* s/USE_OGL/USE_OPENGLChristophe Fergeau2011-05-031-5/+5
| | | | This is more explicit about what it does, and not much longer
* add #include <config.h> to all source filesChristophe Fergeau2011-05-031-0/+3
| | | | | | | | When using config.h, it must be the very first include in all source files since it contains #define that may change the compilation process (eg libc structure layout changes when it's used to enable large file support on 32 bit x86 archs). This commit adds it at the beginning of all .c and .cpp files
* autotools: correctly build canvas-related codeChristophe Fergeau2011-05-031-2/+2
| | | | | | | | | | | | | | | | | | | | | spice client and spice server shares code from common/{gdi,gl,sw}_canvas.[ch]. However, while most of the code is shared, the server code wants a canvas compiled with SW_CANVAS_IMAGE_CACHE defined while the client code wants a canvas compiled with SW_CANVAS_CACHE. The initial autotools refactoring didn't take that into account, this is now fixed by this commit. After this commit, the canvas files from common/ are no longer compiled as part of the libspice-common.la convenience library. Instead, there are "proxy" canvas source files in client/ and server/ which #include the appropriate C files after defining the relevant #define for the binary that is being built. To prevent misuse of the canvas c files and headers in common/, SPICE_CANVAS_INTERNAL must be set when including the canvas headers from common/ or when building the c files from common/ otherwise the build will error out.
* use foo(void) instead of foo() in prototypesChristophe Fergeau2011-05-021-7/+7
| | | | | In C, the latter isn't a prototype for a function with no arg, but declares a function with an undefined number of args.
* server: rename s/peer/streamMarc-André Lureau2011-02-281-4/+4
| | | | | | | | This is stylish change again. We are talking about a RedStream object, so let's just name the variable "stream" everywhere, to avoid confusion with a non existent RedPeer object. https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: s/RedsStreamContext/RedsStreamMarc-André Lureau2011-02-271-4/+4
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: enabling/disabling jpeg and zlib-over-glz via spice command line argsYonit Halperin2010-07-121-0/+4
|
* server: Remove unnecessary pci id/rev checksAlexander Larsson2010-07-081-7/+0
| | | | | | There is no need to check the pci ids or revisions. Thats a contract between qemu and the driver, and spice need not care, as long as we get the right data from qemu.
* - fix for noopengl patch for serverAlon Levy2010-07-011-0/+4
| | | | | | | | I still don't have commit access (can't ssh to anarchy) so if someone could commit this (alex) thanks, Alon Fix for no opengl patch - required to compile the server (fixes missing symbol gl_canvas_init).
* server: Don't call opengl if not enabledAlexander Larsson2010-06-291-0/+2
| | | | | If USE_OGL is not defined, really don't call or link in the opengl backend.
* qxl abi: parse QXLRect.Gerd Hoffmann2010-06-291-1/+17
|
* RedWorkeMessage -> RedWorkerMessageAlexander Larsson2010-05-211-25/+25
|
* zap vd_interface.hGerd Hoffmann2010-05-191-1/+1
| | | | move over content to spice.h
* replace worker load/save with loadvm_commands, allow keeping surface contentGerd Hoffmann2010-05-191-18/+11
| | | | | | | | | | | | | | | Add worker->loadvm_commands. qemu will uses this to send a series of commands needed to restore state after savevm/loadvm and migration. That will be one create-surface command per surface and one cursor-set command for the local pointer. The worker->save/load functions are not needed any more. Likewise the interface->{get,set}_save_data callbacks. Surfaces created via loadvm_commands *will* not be cleared. Also primary surfaces are not cleared any more (unconditionally, although we could do that conditionally on loadvm using the flags field in QXLSurfaceCreate).
* QXL: redesign.Gerd Hoffmann2010-05-191-18/+18
|
* VDInterface: redesign.Gerd Hoffmann2010-05-191-4/+4
| | | | | | | | | | | | VDInterface has been renamed to SpiceBaseInterface. Dropped base_version element, shlib versioning should be used instead. Dropped id element, it is passed to spice_server_add_interface() instead. Now SpiceBaseInterface has static information only, multiple interface instances can share it. Added SpiceBaseInstance struct for maintaining per-instance state information. Adapted spice_server_{add,remove}_interface() functions to the new world.
* Remove all mentions of "cairo" from the codeAlexander Larsson2010-05-031-3/+3
| | | | | The command line option is renamed from "cairo" to "sw", and similarly all filenames and types from Cairo to Sw (and similar).
* spice: server: change update_area commandIzik Eidus2010-04-141-1/+8
| | | | | | | | The new command return dirty area to be used by users that want spice to render localy or into some framebuffer (sdl / vnc) Signed-off-by: Izik Eidus <ieidus@redhat.com>
* Relicense everything from GPL to LGPL 2.1+Alexander Larsson2010-04-131-9/+9
|
* libspice: add off screens supportIzik Eidus2010-04-031-0/+1
| | | | Signed-off-by: Izik Eidus <ieidus@redhat.com>
* Use spice allocator in server/Alexander Larsson2010-03-111-12/+4
|
* new libspice api: make image_compression_t part of the public api.Gerd Hoffmann2010-03-091-3/+4
|
* Use the new header namesAlexander Larsson2010-02-041-1/+1
| | | | | | I just ran: find -name "*.[ch]" | xargs sed -i -f ../spice-protocol/includes.sed find -name "*.cpp" | xargs sed -i -f ../spice-protocol/includes.sed
* Rename symbols that were changed in spice-protocolAlexander Larsson2010-02-041-2/+2
| | | | | | This is an automatic change using: $ find -name "*.[ch]" | xargs ../spice-protocol/rename-identifiers.sh ../spice-protocol/renames $ find -name "*.cpp" | xargs ../spice-protocol/rename-identifiers.sh ../spice-protocol/renames
* libspice: add surface 0 supportIzik Eidus2010-01-281-30/+81
| | | | | | This include alot of infestracture for off screens. Signed-off-by: Izik Eidus <ieidus@redhat.com>
* spice: fix server crush in case connecting without qxl deviceIzik Eidus2009-12-241-0/+3
| | | | Signed-off-by: Izik Eidus <ieidus@redhat.com>
* spice server: heuristic for distinguishing between "real" videos and textual ↵Yonit Halperin2009-11-301-1/+2
| | | | streams
* spice: server: add memslots support.Izik Eidus2009-11-231-0/+38
| | | | Signed-off-by: Izik Eidus <ieidus@redhat.com>
* fresh startYaniv Kamay2009-10-141-0/+479