summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2013-11-23Add -pthread to AM_CFLAGS to do the right thing when using threadsKristian Høgsberg1-1/+1
https://bugs.freedesktop.org/show_bug.cgi?id=71633
2013-11-21connection: Error out if file descriptor was not receivedLubomir Rintel1-0/+9
Otherwise the tail of fds_in buffer would just shift beyond the beginning. That confuses the actual request handler and results in a crash further on due to corrupted tail. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
2013-11-19wayland-server: Improve error messages for bad globalsJasper St. Pierre1-3/+7
A bug in Weston's toytoolkit gave me an hour of debugging headaches. Improve the error messages that we send if a client requests an invalid global, either by name or by version.
2013-11-15client: Introduce functions to allocate and marshal proxies atomicallyKristian Høgsberg4-75/+189
The server requires clients to only allocate one ID ahead of the previously highest ID in order to keep the ID range tight. Failure to do so will make the server close the client connection. However, the way we allocate new IDs is racy. The generated code looks like: new_proxy = wl_proxy_create(...); wl_proxy_marshal(proxy, ... new_proxy, ...); If two threads do this at the same time, there's a chance that thread A will allocate a proxy, then get pre-empted by thread B which then allocates a proxy and then passes it to wl_proxy_marshal(). The ID for thread As proxy will be one higher that the currently highest ID, but the ID for thread Bs proxy will be two higher. But since thread B prempted thread A before it could send its new ID, B will send its new ID first, the server will see the ID from thread Bs proxy first, and will reject it. We fix this by introducing wl_proxy_marshal_constructor(). This function is identical to wl_proxy_marshal(), except that it will allocate a wl_proxy for NEW_ID arguments and send it, all under the display mutex. By introducing a new function, we maintain backwards compatibility with older code from the generator, and make sure that the new generated code has an explicit dependency on a new enough libwayland-client.so. A virtual Wayland merit badge goes to Kalle Vahlman, who tracked this down and analyzed the issue. Reported-by: Kalle Vahlman <kalle.vahlman@movial.com>
2013-11-15shm: Avoid file descriptor leak upon unsuccessful mmapLubomir Rintel1-1/+1
It would be possible to make the compositor leak file descriptors by passing descriptors of open unmmapable files to it, such as /dev/null. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
2013-11-15Add documentation for wl_shm_buffer_begin/end_accessNeil Roberts1-0/+64
It's not obvious that these functions are needed so it would be good to have some documentation for them.
2013-11-15scanner: Add location to elements so we can give better errors/warningsKristian Høgsberg1-7/+25
2013-11-15scanner: Make fail() function use va_list and elaborate a few errorsKristian Høgsberg1-7/+14
2013-11-15scanner: Introduce struct location for tracking source locationsKristian Høgsberg1-20/+26
2013-11-15scanner: Warn about requests with more than one new-id and don't generate stubsKristian Høgsberg1-0/+14
The generated code only support one new-id per request, since the stubs return the new proxy. It's still possible to send requests with multiple new-id arguments, but it must be done with wl_proxy_marshal_array_constructor().
2013-11-13server: Start documenting the server side APIKristian Høgsberg1-0/+130
This is now public, stable API, so it seems prudent to actually document it.
2013-11-13server: Add API to protect access to an SHM bufferNeil Roberts2-0/+137
Linux will let you mmap a region of a file that is larger than the size of the file. If you then try to read from that region the process will get a SIGBUS signal. Currently the clients can use this to crash a compositor because it can create a pool and lie about the size of the file which will cause the compositor to try and read past the end of it. The compositor can't simply check the size of the file to verify that it is big enough because then there is a race condition where the client may truncate the file after the check is performed. This patch adds the following two public functions in the server API which can be used wrap access to an SHM buffer: void wl_shm_buffer_begin_access(struct wl_shm_buffer *buffer); void wl_shm_buffer_end_access(struct wl_shm_buffer *buffer); The first time wl_shm_buffer_begin_access is called a signal handler for SIGBUS will be installed. If the signal is caught then the buffer for the current pool is remapped to an anonymous private buffer at the same address which allows the compositor to continue without crashing. The end_access function will then post an error to the buffer resource. The current pool is stored as part of some thread-local storage so that multiple threads can safely independently access separate buffers. Eventually we may want to add some more API so that compositors can hook into the signal handler or replace it entirely if they also want to do some SIGBUS handling.
2013-10-21wayland: Be consistent about #include-guard namesKristian Høgsberg3-6/+6
We had a mix of inconsistent names, some of which were non-conformant. Standardize on all-uppercase-and-underscore naming convention. https://bugs.freedesktop.org/show_bug.cgi?id=70679
2013-10-07scanner: Handle unrecognized invocation modeKristian Høgsberg1-1/+3
Print usage if we don't recognize the invocation mode. Also fixes uninitialized variable warning.
2013-09-25client: Fix handling display->reader_count if poll failsNeil Roberts1-1/+3
In wl_display_dispatch_queue, if poll fails then it would previously return immediately and leak a reference in display->reader_count. Then if the application ignores the error and tries to read again it will block forever. This can happen for example if the poll fails with EINTR which the application might consider to be a recoverable error. This patch makes it cancel the read so the reader_count will be decremented when poll fails.
2013-09-21Export the Wayland protocol XML fileJason Ekstrand2-0/+4
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-09-21client: fix an inconsistency in documentationChang Liu1-1/+1
The errno is set to EAGAIN when there are undispatched events, according to L1066 of wayland-client.c.
2013-09-21doc: Slight tweaks to wl_listenerAaron Faanes1-4/+6
Prefer \comment over // in code blocks for consistency's sake and keep variable definitions separated by a line from the rest of the body.
2013-09-21utils: Document wl_container_ofAaron Faanes1-0/+35
2013-09-16wayland-server: Improve wording for wl_signal_get's docAaron Faanes1-1/+1
The old description was a bit vague; this commit hopefully improves describing what is returned.
2013-09-16utils: Add doxygen for wayland-util.hAaron Faanes1-0/+5
This is needed for doxygen to generate output for macro definitions, such as wl_container_of, that are contained by this file. Classes like wl_list would be documented regardless.
2013-09-16utils: Reference some useful methods in wl_signal's doxygenAaron Faanes1-1/+6
This commit adds a bit more detail on the lifecycle of a signal.
2013-09-16wayland-server: Document wl_listenerAaron Faanes1-0/+45
This patch takes Kristian's comments into account, adding a demonstration and giving a more thorough idea of how wl_listener is used.
2013-09-11wayland-server: Add a wl_resource_for_each_safe macroRob Bradford1-0/+8
A version of wl_resource_for_each that is safe for iteration when items in the list are removed.
2013-09-11utils: tweak wl_list for better doxygen outputAaron Faanes1-2/+3
2013-09-11wayland-server: Document wl_signalAaron Faanes1-0/+37
2013-09-11wayland-server: Fix a uninitialized warning from clangAaron Faanes1-1/+1
This warning is unnecessary, since the pointer in question is only used for pointer arithmetic, but setting it explicitly to NULL doesn't hurt.
2013-08-30scanner: Emit wl_*_destroy stub even if interface has a destructorKristian Høgsberg1-1/+1
If an interface has a destructor but no 'destroy' method we used to not emit a destroy method. Now with the fix for missing destroy requests for wl_pointer etc we need to emit the local wl_*_destroy always.
2013-08-19Add support for client-side language bindingsJason Ekstrand2-9/+86
This commit adds support for language bindings on the client half of the library. The idea is the same as for server-side dispatchers. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-08-19Add support for server-side language bindingsJason Ekstrand5-25/+120
This commit adds support for server-side languages bindings. This is done in two ways: 1. Adding a wl_resource_set_dispatcher function that corresponds to wl_resource_set_interface. The only difference between the two functions is that the new version takes a dispatcher along with the implementation, data, and destructor. This allows for runtime calling of native language functions for callbacks instead of having to generate function pointers. 2. Adding versions of wl_resource_post_event and wl_resource_queue_event that take an array of wl_argument instead of a variable argument list. This allows for easier run-time argument conversion and removes the need for libffi-based calling of variadic functions. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-08-12wayland-client: Add wl_proxy_get_listenerRob Bradford2-0/+20
This is the mirror function to wl_proxy_add_listener and is useful inside client libraries to differentiate events on listeners for which multiple proxies have been created.
2013-08-12wayland-server: Add a wl_resource_for_each macroRob Bradford1-0/+5
This macro allows you to correctly iterate through a list of resources handling the opaque nature of this type.
2013-08-08client: Improve spelling and grammar in commentsBryce W. Harrington1-6/+6
Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-08-08server: Release additional_shm_formats array at display destructionTomeu Vizoso1-0/+2
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-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-09Replace two remaining wl_display_add_gloavl() occurencesKristian Høgsberg1-1/+1
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 Ueno3-0/+18
To allow user program to include wayland-scanner.m4 in tarball, move the path variables from it into wayland-scanner.pc.