summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2013-08-08server: Release additional_shm_formats array at display destructionHEADmasterTomeu Vizoso1-0/+2
2013-08-07scanner: check for wayland-scanner.pc before using variablesPeter Hutterer1-0/+2
If wayland-scanner.pc can't be found the variables end up being set irrespectively, leaving the user with odd compiler errors about missing headers, etc.
2013-08-07scanner: expand help stringPeter Hutterer1-0/+4
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2013-08-07scanner: support help and --helpPeter Hutterer1-6/+23
wayland-scanner without arguments prints out usage. With help or --help it waits for stdin to supply something which isn't quite as informative as printing out the help. This patch also moves the strcmp for args up to have all of them in one location.
2013-08-07Don't include wayland-server.h in wayland-private.hKristian Høgsberg1-1/+2
We just declare struct wl_display manually instead.
2013-08-06shm: Add API for renderers to register additional pixel formatsTomeu Vizoso4-13/+58
2013-08-06server: Set client->error when we fail to send a closureKristian Høgsberg1-14/+4
We we're using wl_event_loop_add_idle() here, but if we're failing because of OOM, that will typically also fail. Instead, use the existing client->error flag, which will break out of the event handling loop and shut down the client.
2013-08-06server: Handle OOM properly when we fail to allocate a send closureKristian Høgsberg1-2/+6
If we can't allocate a closure, don't just silently continue. Set client->error so we shut down the client when we're done processing events.
2013-07-29client: Simply wl_display_dispatch_queue_pending() and fix return valueJiergir Ogoerg1-7/+4
We're supposed to return number of events dispatched on success, not 0. Refactor to avoid goto and just return ret.
2013-07-29protocol: Copy missing pixel formats from wl_drm to wl_shmTomeu Vizoso1-1/+64
2013-07-13Bump version to 1.2.0Kristian Høgsberg1-2/+2
2013-07-13wayland-client: Handle potential NULL-derefKristian Høgsberg1-0/+2
Instead, return -1 on out-of-memory. errno will be set to ENOMEM by the failing malloc.
2013-07-13scanner: Fail more gracefully on out-of-memoryKristian Høgsberg1-18/+41
Failing with an error message and error code is little nicer. I doubt we'll hit this case much, but it makes the static analysis happy.
2013-07-12connection: Handle empty signature and signature with just a version.Mariusz Ceier1-0/+1
Functions like wl_argument_from_va_list expect from get_next_argument, to initialize details->type but when the signature is empty or contains only version (like in desktop-shell-protocol.c in weston) it is left uninitialized. This patch fixes it, by initializing details->type with '\0' value, signaling end of arguments. Signed-off-by: Mariusz Ceier <mceier+wayland@gmail.com>
2013-07-09Bump version to 1.1.91Kristian Høgsberg1-1/+1
2013-07-09Replace two remaining wl_display_add_gloavl() occurencesKristian Høgsberg2-3/+4
2013-07-09wayland-server: Don't close display fd in fatal error handlerKristian Høgsberg1-4/+1
We can't do that there, we have to make sure it stays a valid fd until the application calls wl_display_disconnect(). Otherwise the application may end up poll()ing on a stale or wrong fd in case another part of the application (or another thread) triggered a fatal error.
2013-07-09wayland-server: Return 0 from read_events() in case of EAGAINKristian Høgsberg1-2/+4
Getting no data from the socket is not an error condition. This may happen in case of calling prepare_read() and then read_events() with no other pending readers and no data in the socket. In general, read_events() may not queue up events in the given event queue. From a given threads point of view it doesn't matter whether events were read and put in a different event queue or no events were read at all.
2013-07-09wayland-client: Treat EOF when reading the wayland socket as an errorNeil Roberts1-0/+8
If EOF is encountered while reading from the Wayland socket, make wl_display_read_events() return -1 so that it will be treated as an error. The documentation for this function states that it will set errno when there is an error so it additionally makes up an errno of EPIPE. If we don't do this then when the compositor quits the Wayland socket will be become ready for reading but wl_display_dispatch will do nothing which typically makes the application take up 100% CPU. In particular eglSwapBuffers will likely get stuck in an infinite busy loop because it repeatedly calls wl_display_dispatch_queue while it waits for the frame callback. https://bugzilla.gnome.org/show_bug.cgi?id=703892
2013-07-09wayland-server: Add wl_global_create/destroy()Kristian Høgsberg2-17/+60
This patch introduces wl_global_create() and wl_global_destroy() as replacements for wl_display_add_global() and wl_display_remove_global(). The add/remove_global API did not allow a compositor to indicate the implemented version of a global, it just took the version from the interface meta data. The problem is that the meta data (which lives in libwayland-server.so) can get out of sync with a compositor implementation. The compositor will then advertise a higher version of a global than what it actually implements. The new API lets a compositor pass in a version when it registers a global, which solves the problem. The add/remove API is deprecated with this patch and will be removed.
2013-07-03build: Add wayland-scanner.pc.Daiki Ueno7-18/+32
To allow user program to include wayland-scanner.m4 in tarball, move the path variables from it into wayland-scanner.pc.
2013-07-03build: Install wayland-scanner.mk under $(pkgdatadir).Daiki Ueno1-2/+2
2013-07-02wayland-server: Free non-legacy wl_resource structs during wl_client_destroyKristian Høgsberg1-3/+6
We need to free the non-legacy resources during client shutdown as well.
2013-07-02wayland-server: Remove left-over double free in unbind_resource() helperKristian Høgsberg1-1/+0
2013-07-02wayland-server: Remove error event posting from wl_resource_createKristian Høgsberg3-9/+60
The wl_client_add/new_object() functions sends out an NO_MEMORY error if the allocation fails. This was convenient in a couple of places where that was all the error handling that was needed. Unfortunately that looks like out-of-memory isn't handled at the call site and set a bad precedent for not cleaning up properly or not handling at all. As we're introducing wl_resource_create() as a replacement for those two functions, let's remove the automatic error event posting and require the caller to do that if necessary. This commit also introduces a new helper, wl_client_post_no_memory() to make it possible to send NO_MEMORY events from bind where we don't have a wl_resource.
2013-07-02wayland-server: Mark wl_client_add/new_object as deprecatedKristian Høgsberg2-54/+70
2013-07-02wayland-server: Dont free resource in user data destroy callbackKristian Høgsberg1-1/+0
2013-07-02wayland-server: Verify request versions before invoking handlerJason Ekstrand1-0/+15
This commit provides a layer of protection for the compositor in the form of message version checking. We track version information in the wl_resource and now use this version information to verify that a request exists in that protocol version before invoking it. This way libwayland won't accidentally invoke a request that does not exist and thereby cause the compositor to crash. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-07-02Add wl_resource_create() and a version field to wl_resourceJason Ekstrand3-32/+80
A new function, wl_resource_create(), lets the compositor create a wl_resource for a given version of the interface. Passing 0 for the object ID will allocate a new ID. The implementation, user data and destructor can be set with wl_resource_set_implementation(). These two functions deprecates wl_client_add/new_object and the main difference and motivation is the ability to provide a version number for the resource. This lets the compositor track which version of the interface a client has created and we'll use that to verify incoming requests. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-07-02Add version information to wl_message signatures.Jason Ekstrand3-12/+50
This commit adds version information to wl_message signatures and a wl_message_get_since function to retrieve. The since version comes in the form of a (possible) integer at the begining of the message. If the message starts with an integer, then it specifies the "since" version of that message. Messages present in version one do not get this "since" information. In this way we can run-time detect the version information for a structure on a per-message basis. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-07-02server: Make wl_object and wl_resource opaque structsKristian Høgsberg11-42/+57
With the work to add wl_resource accessors and port weston to use them, we're ready to make wl_resource and wl_object opaque structs. We keep wl_buffer in the header for EGL stacks to use, but don't expose it by default. In time we'll remove it completely, but for now it provides a transition paths for code that still uses wl_buffer. Reviewed-by: Jason Ekstrand<jason@jlekstrand.net>
2013-06-28protocol: add no_keymap format to keymap formatsRob Bradford1-0/+2
This format is used to specify that the key button events received are not in relation to any key map and that the codes should be interpreted directly. v2: Use zero for the no keymap enum value and enhance the documentation for the enum entry.
2013-06-21Change wl_shm_buffer to use a resource pointerJason Ekstrand2-37/+19
This commit also has the effect of making wl_shm_buffer no longer a wl_buffer derivative. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-21Change SHM wl_buffer functions to use the wl_shm_buffer structureJason Ekstrand2-26/+25
This commit does not break ABI. It merely changes the types of some things and adds a wl_shm_buffer_get function. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-21Add a wl_resource_instance_of functionJason Ekstrand4-4/+21
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-20Free non-legacy resources inside wl_resource_destroyJason Ekstrand1-1/+4
This commit makes wl_resource_destroy automatically free all non-legacy resource structures. Since wl_resource is now an opaque structure it doesn't make sense for the clients to be freeing it. This checks to make sure that it was added through wl_client_add_object or wl_client_new_object and not wl_client_add_resource before it frees it. This way if it is a legacy resources embedded in a structure somewhere we don't have an invalid free. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-18doc: Add a small contributing guideAnder Conselvan de Oliveira2-0/+85
Document what we expect in terms of commit messages and coding style. New contributors are usually unaware of this, so it is good to have a document to point them too.
2013-06-17client: Add wl_display_prepare_read() API to relax thread model assumptionsKristian Høgsberg3-53/+266
The current thread model assumes that the application or toolkit will have one thread that either polls the display fd and dispatches events or just dispatches in a loop. Only this main thread will read from the fd while all other threads will block on a pthread condition and expect the main thread to deliver events to them. This turns out to be too restrictive. We can't assume that there always will be a thread like that. Qt QML threaded rendering will block the main thread on a condition that's signaled by a rendering thread after it finishes rendering. This leads to a deadlock when the rendering threads blocks in eglSwapBuffers(), and the main thread is waiting on the condition. Another problematic use case is with games that has a rendering thread for a splash screen while the main thread is busy loading game data or compiling shaders. The main thread isn't responsive and ends up blocking eglSwapBuffers() in the rendering thread. We also can't assume that there will be only one thread polling on the file descriptor. A valid use case is a thread receiving data from a custom wayland interface as well as a device fd or network socket. The thread may want to wait on either events from the wayland interface or data from the fd, in which case it needs to poll on both the wayland display fd and the device/network fd. The solution seems pretty straightforward: just let all threads read from the fd. However, the main-thread restriction was introduced to avoid a race. Simplified, main loops will do something like this: wl_display_dispatch_pending(display); /* Race here if other thread reads from fd and places events * in main eent queue. We go to sleep in poll while sitting on * events that may stall the application if not dispatched. */ poll(fds, nfds, -1); /* Race here if other thread reads and doesn't queue any * events for main queue. wl_display_dispatch() below will block * trying to read from the fd, while other fds in the mainloop * are ignored. */ wl_display_dispatch(display); The restriction that only the main thread can read from the fd avoids these races, but has the problems described above. This patch introduces new API to solve both problems. We add int wl_display_prepare_read(struct wl_display *display); and int wl_display_read_events(struct wl_display *display); wl_display_prepare_read() registers the calling thread as a potential reader of events. Once data is available on the fd, all reader threads must call wl_display_read_events(), at which point one of the threads will read from the fd and distribute the events to event queues. When that is done, all threads return from wl_display_read_events(). From the point of view of a single thread, this ensures that between calling wl_display_prepare_read() and wl_display_read_events(), no other thread will read from the fd and queue events in its event queue. This avoids the race conditions described above, and we avoid relying on any one thread to be available to read events.
2013-06-14server: Add aditional wl_resource accessorsJason Ekstrand2-0/+36
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-14protocol: Add missing since attribute for name event on wl_seatRob Bradford1-1/+1
This event was added in version 2 of the protocol.
2013-06-14build: Fix warning message on syscall failuresRob Bradford1-3/+3
2013-06-07server: Add wl_resource_get_id()Kristian Høgsberg2-0/+8
2013-06-05Update tests for wl_map changes and add a map_flags testJason Ekstrand3-19/+41
2013-06-05Remove incorrect sanity-check from wl_map_insert_atJason Ekstrand1-6/+0
I got a little over-eager with my sanity checks and didn't realize that the client uses wl_map_insert_at to mark objects as zombies when they come from the server-side. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-05Change WL_ZOMBIE_OBJECT from 0x2 to an actual pointerJason Ekstrand2-2/+5
In order to use the second-lowest bit of each pointer in wl_map for the WL_MAP_ENTRY_LEGACY flag, every pointer has to be a multiple of 4. This was a good assumption, except with WL_ZOMBIE_OBJECT. This commit creates an actual static variable to which WL_ZOMBIE_OBJECT now points. Since things are only every compared to WL_ZOMBIE_OBJECT with "==" or "!=", the only thing that matters is that it is unique. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-05protocol: Move new name event below existing requests and events and version itKristian Høgsberg1-9/+12
Missed v2 of Robs patch that already did this based on feedback from Ander and Daniel.
2013-06-05Add accessor functions for wl_resource and deprecate wl_client_add_resourceJason Ekstrand4-20/+95
This is the first step towards making wl_resource an opaque pointer type. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-05Add support for flags in the wl_map API and add a WL_MAP_ENTRY_LEGACY flagJason Ekstrand4-20/+58
The implementation in this commit allows for one bit worth of flags. If more flags are desired at a future date, then the wl_map implementation will have to change but the wl_map API will not. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-05Add a "side" field and some sanity checks to wl_map.Jason Ekstrand4-15/+32
The original wl_map implementation did no checking to ensures that ids fell on the correct side of the WL_SERVER_ID_START line. This meant that a client could send the server a server ID and it would happily try to use it. Also, there was no distinction between server-side and client-side in wl_map_remove. Because wl_map_remove added the entry to the free list regardless of which side it came from, the following set of actions would break the map: 1. Client creates a bunch of objects 2. Client deletes one or more of those objects 3. Client does something that causes the server to create an object Because of the problem in wl_map_remove, the server would take an old client-side id, apply the WL_SERVER_ID_START offset, and try to use it as a server-side id regardless of whether or not it was valid. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-06-05protocol: Add a name event to give seat nameRob Bradford1-1/+10
This provides the ability for a client to differentiate events from different seats in a multiple seat environment.