Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright  2008-2012 Kristian Hgsberg
      3  * Copyright  2010-2012 Intel Corporation
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining
      6  * a copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sublicense, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial
     15  * portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     20  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     21  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     22  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     23  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     24  * SOFTWARE.
     25  */
     26 
     27 #define _GNU_SOURCE
     28 
     29 #include <stdlib.h>
     30 #include <stdint.h>
     31 #include <stddef.h>
     32 #include <stdio.h>
     33 #include <stdbool.h>
     34 #include <errno.h>
     35 #include <string.h>
     36 #include <unistd.h>
     37 #include <sys/socket.h>
     38 #include <sys/un.h>
     39 #include <ctype.h>
     40 #include <assert.h>
     41 #include <fcntl.h>
     42 #include <poll.h>
     43 #include <pthread.h>
     44 
     45 #include "wayland-util.h"
     46 #include "wayland-os.h"
     47 #include "wayland-client.h"
     48 #include "wayland-private.h"
     49 
     50 /** \cond */
     51 
     52 enum wl_proxy_flag {
     53 	WL_PROXY_FLAG_ID_DELETED = (1 << 0),
     54 	WL_PROXY_FLAG_DESTROYED = (1 << 1),
     55 	WL_PROXY_FLAG_WRAPPER = (1 << 2),
     56 };
     57 
     58 struct wl_proxy {
     59 	struct wl_object object;
     60 	struct wl_display *display;
     61 	struct wl_event_queue *queue;
     62 	uint32_t flags;
     63 	int refcount;
     64 	void *user_data;
     65 	wl_dispatcher_func_t dispatcher;
     66 	uint32_t version;
     67 };
     68 
     69 struct wl_global {
     70 	uint32_t id;
     71 	char *interface;
     72 	uint32_t version;
     73 	struct wl_list link;
     74 };
     75 
     76 struct wl_event_queue {
     77 	struct wl_list event_list;
     78 	struct wl_display *display;
     79 };
     80 
     81 struct wl_display {
     82 	struct wl_proxy proxy;
     83 	struct wl_connection *connection;
     84 
     85 	/* errno of the last wl_display error */
     86 	int last_error;
     87 
     88 	/* When display gets an error event from some object, it stores
     89 	 * information about it here, so that client can get this
     90 	 * information afterwards */
     91 	struct {
     92 		/* Code of the error. It can be compared to
     93 		 * the interface's errors enumeration. */
     94 		uint32_t code;
     95 		/* interface (protocol) in which the error occurred */
     96 		const struct wl_interface *interface;
     97 		/* id of the proxy that caused the error. There's no warranty
     98 		 * that the proxy is still valid. It's up to client how it will
     99 		 * use it */
    100 		uint32_t id;
    101 	} protocol_error;
    102 	int fd;
    103 	struct wl_map objects;
    104 	struct wl_event_queue display_queue;
    105 	struct wl_event_queue default_queue;
    106 	pthread_mutex_t mutex;
    107 
    108 	int reader_count;
    109 	uint32_t read_serial;
    110 	pthread_cond_t reader_cond;
    111 };
    112 
    113 /** \endcond */
    114 
    115 static int debug_client = 0;
    116 
    117 /**
    118  * This helper function wakes up all threads that are
    119  * waiting for display->reader_cond (i. e. when reading is done,
    120  * canceled, or an error occurred)
    121  *
    122  * NOTE: must be called with display->mutex locked
    123  */
    124 static void
    125 display_wakeup_threads(struct wl_display *display)
    126 {
    127 	/* Thread can get sleeping only in read_events(). If we're
    128 	 * waking it up, it means that the read completed or was
    129 	 * canceled, so we must increase the read_serial.
    130 	 * This prevents from indefinite sleeping in read_events().
    131 	 */
    132 	++display->read_serial;
    133 
    134 	pthread_cond_broadcast(&display->reader_cond);
    135 }
    136 
    137 /**
    138  * This function is called for local errors (no memory, server hung up)
    139  *
    140  * \param display
    141  * \param error    error value (EINVAL, EFAULT, ...)
    142  *
    143  * \note this function is called with display mutex locked
    144  */
    145 static void
    146 display_fatal_error(struct wl_display *display, int error)
    147 {
    148 	if (display->last_error)
    149 		return;
    150 
    151 	if (!error)
    152 		error = EFAULT;
    153 
    154 	display->last_error = error;
    155 
    156 	display_wakeup_threads(display);
    157 }
    158 
    159 /**
    160  * This function is called for error events
    161  * and indicates that in some object an error occurred.
    162  * The difference between this function and display_fatal_error()
    163  * is that this one handles errors that will come by wire,
    164  * whereas display_fatal_error() is called for local errors.
    165  *
    166  * \param display
    167  * \param code    error code
    168  * \param id      id of the object that generated the error
    169  * \param intf    protocol interface
    170  */
    171 static void
    172 display_protocol_error(struct wl_display *display, uint32_t code,
    173 		       uint32_t id, const struct wl_interface *intf)
    174 {
    175 	int err;
    176 
    177 	if (display->last_error)
    178 		return;
    179 
    180 	/* set correct errno */
    181 	if (intf && wl_interface_equal(intf, &wl_display_interface)) {
    182 		switch (code) {
    183 		case WL_DISPLAY_ERROR_INVALID_OBJECT:
    184 		case WL_DISPLAY_ERROR_INVALID_METHOD:
    185 			err = EINVAL;
    186 			break;
    187 		case WL_DISPLAY_ERROR_NO_MEMORY:
    188 			err = ENOMEM;
    189 			break;
    190 		default:
    191 			err = EFAULT;
    192 		}
    193 	} else {
    194 		err = EPROTO;
    195 	}
    196 
    197 	pthread_mutex_lock(&display->mutex);
    198 
    199 	display->last_error = err;
    200 
    201 	display->protocol_error.code = code;
    202 	display->protocol_error.id = id;
    203 	display->protocol_error.interface = intf;
    204 
    205 	/*
    206 	 * here it is not necessary to wake up threads like in
    207 	 * display_fatal_error, because this function is called from
    208 	 * an event handler and that means that read_events() is done
    209 	 * and woke up all threads. Since wl_display_prepare_read()
    210 	 * fails when there are events in the queue, no threads
    211 	 * can sleep in read_events() during dispatching
    212 	 * (and therefore during calling this function), so this is safe.
    213 	 */
    214 
    215 	pthread_mutex_unlock(&display->mutex);
    216 }
    217 
    218 static void
    219 wl_event_queue_init(struct wl_event_queue *queue, struct wl_display *display)
    220 {
    221 	wl_list_init(&queue->event_list);
    222 	queue->display = display;
    223 }
    224 
    225 static void
    226 decrease_closure_args_refcount(struct wl_closure *closure)
    227 {
    228 	const char *signature;
    229 	struct argument_details arg;
    230 	int i, count;
    231 	struct wl_proxy *proxy;
    232 
    233 	signature = closure->message->signature;
    234 	count = arg_count_for_signature(signature);
    235 	for (i = 0; i < count; i++) {
    236 		signature = get_next_argument(signature, &arg);
    237 		switch (arg.type) {
    238 		case 'n':
    239 		case 'o':
    240 			proxy = (struct wl_proxy *) closure->args[i].o;
    241 			if (proxy) {
    242 				if (proxy->flags & WL_PROXY_FLAG_DESTROYED)
    243 					closure->args[i].o = NULL;
    244 
    245 				proxy->refcount--;
    246 				if (!proxy->refcount)
    247 					free(proxy);
    248 			}
    249 			break;
    250 		default:
    251 			break;
    252 		}
    253 	}
    254 }
    255 
    256 static void
    257 wl_event_queue_release(struct wl_event_queue *queue)
    258 {
    259 	struct wl_closure *closure;
    260 	struct wl_proxy *proxy;
    261 	bool proxy_destroyed;
    262 
    263 	while (!wl_list_empty(&queue->event_list)) {
    264 		closure = container_of(queue->event_list.next,
    265 				       struct wl_closure, link);
    266 		wl_list_remove(&closure->link);
    267 
    268 		decrease_closure_args_refcount(closure);
    269 
    270 		proxy = closure->proxy;
    271 		proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
    272 
    273 		proxy->refcount--;
    274 		if (proxy_destroyed && !proxy->refcount)
    275 			free(proxy);
    276 
    277 		wl_closure_destroy(closure);
    278 	}
    279 }
    280 
    281 /** Destroy an event queue
    282  *
    283  * \param queue The event queue to be destroyed
    284  *
    285  * Destroy the given event queue. Any pending event on that queue is
    286  * discarded.
    287  *
    288  * The \ref wl_display object used to create the queue should not be
    289  * destroyed until all event queues created with it are destroyed with
    290  * this function.
    291  *
    292  * \memberof wl_event_queue
    293  */
    294 WL_EXPORT void
    295 wl_event_queue_destroy(struct wl_event_queue *queue)
    296 {
    297 	struct wl_display *display = queue->display;
    298 
    299 	pthread_mutex_lock(&display->mutex);
    300 	wl_event_queue_release(queue);
    301 	free(queue);
    302 	pthread_mutex_unlock(&display->mutex);
    303 }
    304 
    305 /** Create a new event queue for this display
    306  *
    307  * \param display The display context object
    308  * \return A new event queue associated with this display or NULL on
    309  * failure.
    310  *
    311  * \memberof wl_display
    312  */
    313 WL_EXPORT struct wl_event_queue *
    314 wl_display_create_queue(struct wl_display *display)
    315 {
    316 	struct wl_event_queue *queue;
    317 
    318 	queue = malloc(sizeof *queue);
    319 	if (queue == NULL)
    320 		return NULL;
    321 
    322 	wl_event_queue_init(queue, display);
    323 
    324 	return queue;
    325 }
    326 
    327 static struct wl_proxy *
    328 proxy_create(struct wl_proxy *factory, const struct wl_interface *interface,
    329 	     uint32_t version)
    330 {
    331 	struct wl_proxy *proxy;
    332 	struct wl_display *display = factory->display;
    333 
    334 	proxy = zalloc(sizeof *proxy);
    335 	if (proxy == NULL)
    336 		return NULL;
    337 
    338 	proxy->object.interface = interface;
    339 	proxy->display = display;
    340 	proxy->queue = factory->queue;
    341 	proxy->refcount = 1;
    342 	proxy->version = version;
    343 
    344 	proxy->object.id = wl_map_insert_new(&display->objects, 0, proxy);
    345 
    346 	return proxy;
    347 }
    348 
    349 /** Create a proxy object with a given interface
    350  *
    351  * \param factory Factory proxy object
    352  * \param interface Interface the proxy object should use
    353  * \return A newly allocated proxy object or NULL on failure
    354  *
    355  * This function creates a new proxy object with the supplied interface. The
    356  * proxy object will have an id assigned from the client id space. The id
    357  * should be created on the compositor side by sending an appropriate request
    358  * with \ref wl_proxy_marshal().
    359  *
    360  * The proxy will inherit the display and event queue of the factory object.
    361  *
    362  * \note This should not normally be used by non-generated code.
    363  *
    364  * \sa wl_display, wl_event_queue, wl_proxy_marshal()
    365  *
    366  * \memberof wl_proxy
    367  */
    368 WL_EXPORT struct wl_proxy *
    369 wl_proxy_create(struct wl_proxy *factory, const struct wl_interface *interface)
    370 {
    371 	struct wl_display *display = factory->display;
    372 	struct wl_proxy *proxy;
    373 
    374 	pthread_mutex_lock(&display->mutex);
    375 	proxy = proxy_create(factory, interface, factory->version);
    376 	pthread_mutex_unlock(&display->mutex);
    377 
    378 	return proxy;
    379 }
    380 
    381 /* The caller should hold the display lock */
    382 static struct wl_proxy *
    383 wl_proxy_create_for_id(struct wl_proxy *factory,
    384 		       uint32_t id, const struct wl_interface *interface)
    385 {
    386 	struct wl_proxy *proxy;
    387 	struct wl_display *display = factory->display;
    388 
    389 	proxy = zalloc(sizeof *proxy);
    390 	if (proxy == NULL)
    391 		return NULL;
    392 
    393 	proxy->object.interface = interface;
    394 	proxy->object.id = id;
    395 	proxy->display = display;
    396 	proxy->queue = factory->queue;
    397 	proxy->refcount = 1;
    398 	proxy->version = factory->version;
    399 
    400 	wl_map_insert_at(&display->objects, 0, id, proxy);
    401 
    402 	return proxy;
    403 }
    404 
    405 static void
    406 proxy_destroy(struct wl_proxy *proxy)
    407 {
    408 	if (proxy->flags & WL_PROXY_FLAG_ID_DELETED)
    409 		wl_map_remove(&proxy->display->objects, proxy->object.id);
    410 	else if (proxy->object.id < WL_SERVER_ID_START)
    411 		wl_map_insert_at(&proxy->display->objects, 0,
    412 				 proxy->object.id, WL_ZOMBIE_OBJECT);
    413 	else
    414 		wl_map_insert_at(&proxy->display->objects, 0,
    415 				 proxy->object.id, NULL);
    416 
    417 
    418 	proxy->flags |= WL_PROXY_FLAG_DESTROYED;
    419 
    420 	proxy->refcount--;
    421 	if (!proxy->refcount)
    422 		free(proxy);
    423 }
    424 
    425 /** Destroy a proxy object
    426  *
    427  * \param proxy The proxy to be destroyed
    428  *
    429  * \c proxy must not be a proxy wrapper.
    430  *
    431  * \memberof wl_proxy
    432  */
    433 WL_EXPORT void
    434 wl_proxy_destroy(struct wl_proxy *proxy)
    435 {
    436 	struct wl_display *display = proxy->display;
    437 
    438 	if (proxy->flags & WL_PROXY_FLAG_WRAPPER)
    439 		wl_abort("Tried to destroy wrapper with wl_proxy_destroy()\n");
    440 
    441 	pthread_mutex_lock(&display->mutex);
    442 	proxy_destroy(proxy);
    443 	pthread_mutex_unlock(&display->mutex);
    444 }
    445 
    446 /** Set a proxy's listener
    447  *
    448  * \param proxy The proxy object
    449  * \param implementation The listener to be added to proxy
    450  * \param data User data to be associated with the proxy
    451  * \return 0 on success or -1 on failure
    452  *
    453  * Set proxy's listener to \c implementation and its user data to
    454  * \c data. If a listener has already been set, this function
    455  * fails and nothing is changed.
    456  *
    457  * \c implementation is a vector of function pointers. For an opcode
    458  * \c n, \c implementation[n] should point to the handler of \c n for
    459  * the given object.
    460  *
    461  * \c proxy must not be a proxy wrapper.
    462  *
    463  * \memberof wl_proxy
    464  */
    465 WL_EXPORT int
    466 wl_proxy_add_listener(struct wl_proxy *proxy,
    467 		      void (**implementation)(void), void *data)
    468 {
    469 	if (proxy->flags & WL_PROXY_FLAG_WRAPPER)
    470 		wl_abort("Proxy %p is a wrapper\n", proxy);
    471 
    472 	if (proxy->object.implementation || proxy->dispatcher) {
    473 		wl_log("proxy %p already has listener\n", proxy);
    474 		return -1;
    475 	}
    476 
    477 	proxy->object.implementation = implementation;
    478 	proxy->user_data = data;
    479 
    480 	return 0;
    481 }
    482 
    483 /** Get a proxy's listener
    484  *
    485  * \param proxy The proxy object
    486  * \return The address of the proxy's listener or NULL if no listener is set
    487  *
    488  * Gets the address to the proxy's listener; which is the listener set with
    489  * \ref wl_proxy_add_listener.
    490  *
    491  * This function is useful in clients with multiple listeners on the same
    492  * interface to allow the identification of which code to execute.
    493  *
    494  * \memberof wl_proxy
    495  */
    496 WL_EXPORT const void *
    497 wl_proxy_get_listener(struct wl_proxy *proxy)
    498 {
    499 	return proxy->object.implementation;
    500 }
    501 
    502 /** Set a proxy's listener (with dispatcher)
    503  *
    504  * \param proxy The proxy object
    505  * \param dispatcher The dispatcher to be used for this proxy
    506  * \param implementation The dispatcher-specific listener implementation
    507  * \param data User data to be associated with the proxy
    508  * \return 0 on success or -1 on failure
    509  *
    510  * Set proxy's listener to use \c dispatcher_func as its dispatcher and \c
    511  * dispatcher_data as its dispatcher-specific implementation and its user data
    512  * to \c data. If a listener has already been set, this function
    513  * fails and nothing is changed.
    514  *
    515  * The exact details of dispatcher_data depend on the dispatcher used.  This
    516  * function is intended to be used by language bindings, not user code.
    517  *
    518  * \c proxy must not be a proxy wrapper.
    519  *
    520  * \memberof wl_proxy
    521  */
    522 WL_EXPORT int
    523 wl_proxy_add_dispatcher(struct wl_proxy *proxy,
    524 			wl_dispatcher_func_t dispatcher,
    525 			const void *implementation, void *data)
    526 {
    527 	if (proxy->flags & WL_PROXY_FLAG_WRAPPER)
    528 		wl_abort("Proxy %p is a wrapper\n", proxy);
    529 
    530 	if (proxy->object.implementation || proxy->dispatcher) {
    531 		wl_log("proxy %p already has listener\n", proxy);
    532 		return -1;
    533 	}
    534 
    535 	proxy->object.implementation = implementation;
    536 	proxy->dispatcher = dispatcher;
    537 	proxy->user_data = data;
    538 
    539 	return 0;
    540 }
    541 
    542 static struct wl_proxy *
    543 create_outgoing_proxy(struct wl_proxy *proxy, const struct wl_message *message,
    544 		      union wl_argument *args,
    545 		      const struct wl_interface *interface, uint32_t version)
    546 {
    547 	int i, count;
    548 	const char *signature;
    549 	struct argument_details arg;
    550 	struct wl_proxy *new_proxy = NULL;
    551 
    552 	signature = message->signature;
    553 	count = arg_count_for_signature(signature);
    554 	for (i = 0; i < count; i++) {
    555 		signature = get_next_argument(signature, &arg);
    556 
    557 		switch (arg.type) {
    558 		case 'n':
    559 			new_proxy = proxy_create(proxy, interface, version);
    560 			if (new_proxy == NULL)
    561 				return NULL;
    562 
    563 			args[i].o = &new_proxy->object;
    564 			break;
    565 		}
    566 	}
    567 
    568 	return new_proxy;
    569 }
    570 
    571 /** Prepare a request to be sent to the compositor
    572  *
    573  * \param proxy The proxy object
    574  * \param opcode Opcode of the request to be sent
    575  * \param args Extra arguments for the given request
    576  * \param interface The interface to use for the new proxy
    577  *
    578  * This function translates a request given an opcode, an interface and a
    579  * wl_argument array to the wire format and writes it to the connection
    580  * buffer.
    581  *
    582  * For new-id arguments, this function will allocate a new wl_proxy
    583  * and send the ID to the server.  The new wl_proxy will be returned
    584  * on success or NULL on error with errno set accordingly.  The newly
    585  * created proxy will inherit their version from their parent.
    586  *
    587  * \note This is intended to be used by language bindings and not in
    588  * non-generated code.
    589  *
    590  * \sa wl_proxy_marshal()
    591  *
    592  * \memberof wl_proxy
    593  */
    594 WL_EXPORT struct wl_proxy *
    595 wl_proxy_marshal_array_constructor(struct wl_proxy *proxy,
    596 				   uint32_t opcode, union wl_argument *args,
    597 				   const struct wl_interface *interface)
    598 {
    599 	return wl_proxy_marshal_array_constructor_versioned(proxy, opcode,
    600 							    args, interface,
    601 							    proxy->version);
    602 }
    603 
    604 
    605 /** Prepare a request to be sent to the compositor
    606  *
    607  * \param proxy The proxy object
    608  * \param opcode Opcode of the request to be sent
    609  * \param args Extra arguments for the given request
    610  * \param interface The interface to use for the new proxy
    611  * \param version The protocol object version for the new proxy
    612  *
    613  * Translates the request given by opcode and the extra arguments into the
    614  * wire format and write it to the connection buffer.  This version takes an
    615  * array of the union type wl_argument.
    616  *
    617  * For new-id arguments, this function will allocate a new wl_proxy
    618  * and send the ID to the server.  The new wl_proxy will be returned
    619  * on success or NULL on error with errno set accordingly.  The newly
    620  * created proxy will have the version specified.
    621  *
    622  * \note This is intended to be used by language bindings and not in
    623  * non-generated code.
    624  *
    625  * \sa wl_proxy_marshal()
    626  *
    627  * \memberof wl_proxy
    628  */
    629 WL_EXPORT struct wl_proxy *
    630 wl_proxy_marshal_array_constructor_versioned(struct wl_proxy *proxy,
    631 					     uint32_t opcode,
    632 					     union wl_argument *args,
    633 					     const struct wl_interface *interface,
    634 					     uint32_t version)
    635 {
    636 	struct wl_closure *closure;
    637 	struct wl_proxy *new_proxy = NULL;
    638 	const struct wl_message *message;
    639 
    640 	pthread_mutex_lock(&proxy->display->mutex);
    641 
    642 	message = &proxy->object.interface->methods[opcode];
    643 	if (interface) {
    644 		new_proxy = create_outgoing_proxy(proxy, message,
    645 						  args, interface,
    646 						  version);
    647 		if (new_proxy == NULL)
    648 			goto err_unlock;
    649 	}
    650 
    651 	closure = wl_closure_marshal(&proxy->object, opcode, args, message);
    652 	if (closure == NULL)
    653 		wl_abort("Error marshalling request: %s\n", strerror(errno));
    654 
    655 	if (debug_client)
    656 		wl_closure_print(closure, &proxy->object, true);
    657 
    658 	if (wl_closure_send(closure, proxy->display->connection))
    659 		wl_abort("Error sending request: %s\n", strerror(errno));
    660 
    661 	wl_closure_destroy(closure);
    662 
    663  err_unlock:
    664 	pthread_mutex_unlock(&proxy->display->mutex);
    665 
    666 	return new_proxy;
    667 }
    668 
    669 
    670 /** Prepare a request to be sent to the compositor
    671  *
    672  * \param proxy The proxy object
    673  * \param opcode Opcode of the request to be sent
    674  * \param ... Extra arguments for the given request
    675  *
    676  * This function is similar to wl_proxy_marshal_constructor(), except
    677  * it doesn't create proxies for new-id arguments.
    678  *
    679  * \note This should not normally be used by non-generated code.
    680  *
    681  * \sa wl_proxy_create()
    682  *
    683  * \memberof wl_proxy
    684  */
    685 WL_EXPORT void
    686 wl_proxy_marshal(struct wl_proxy *proxy, uint32_t opcode, ...)
    687 {
    688 	union wl_argument args[WL_CLOSURE_MAX_ARGS];
    689 	va_list ap;
    690 
    691 	va_start(ap, opcode);
    692 	wl_argument_from_va_list(proxy->object.interface->methods[opcode].signature,
    693 				 args, WL_CLOSURE_MAX_ARGS, ap);
    694 	va_end(ap);
    695 
    696 	wl_proxy_marshal_array_constructor(proxy, opcode, args, NULL);
    697 }
    698 
    699 /** Prepare a request to be sent to the compositor
    700  *
    701  * \param proxy The proxy object
    702  * \param opcode Opcode of the request to be sent
    703  * \param interface The interface to use for the new proxy
    704  * \param ... Extra arguments for the given request
    705  * \return A new wl_proxy for the new_id argument or NULL on error
    706  *
    707  * This function translates a request given an opcode, an interface and extra
    708  * arguments to the wire format and writes it to the connection buffer. The
    709  * types of the extra arguments must correspond to the argument types of the
    710  * method associated with the opcode in the interface.
    711  *
    712  * For new-id arguments, this function will allocate a new wl_proxy
    713  * and send the ID to the server.  The new wl_proxy will be returned
    714  * on success or NULL on error with errno set accordingly.  The newly
    715  * created proxy will inherit their version from their parent.
    716  *
    717  * \note This should not normally be used by non-generated code.
    718  *
    719  * \memberof wl_proxy
    720  */
    721 WL_EXPORT struct wl_proxy *
    722 wl_proxy_marshal_constructor(struct wl_proxy *proxy, uint32_t opcode,
    723 			     const struct wl_interface *interface, ...)
    724 {
    725 	union wl_argument args[WL_CLOSURE_MAX_ARGS];
    726 	va_list ap;
    727 
    728 	va_start(ap, interface);
    729 	wl_argument_from_va_list(proxy->object.interface->methods[opcode].signature,
    730 				 args, WL_CLOSURE_MAX_ARGS, ap);
    731 	va_end(ap);
    732 
    733 	return wl_proxy_marshal_array_constructor(proxy, opcode,
    734 						  args, interface);
    735 }
    736 
    737 
    738 /** Prepare a request to be sent to the compositor
    739  *
    740  * \param proxy The proxy object
    741  * \param opcode Opcode of the request to be sent
    742  * \param interface The interface to use for the new proxy
    743  * \param version The protocol object version of the new proxy
    744  * \param ... Extra arguments for the given request
    745  * \return A new wl_proxy for the new_id argument or NULL on error
    746  *
    747  * Translates the request given by opcode and the extra arguments into the
    748  * wire format and write it to the connection buffer.
    749  *
    750  * For new-id arguments, this function will allocate a new wl_proxy
    751  * and send the ID to the server.  The new wl_proxy will be returned
    752  * on success or NULL on error with errno set accordingly.  The newly
    753  * created proxy will have the version specified.
    754  *
    755  * \note This should not normally be used by non-generated code.
    756  *
    757  * \memberof wl_proxy
    758  */
    759 WL_EXPORT struct wl_proxy *
    760 wl_proxy_marshal_constructor_versioned(struct wl_proxy *proxy, uint32_t opcode,
    761 				       const struct wl_interface *interface,
    762 				       uint32_t version, ...)
    763 {
    764 	union wl_argument args[WL_CLOSURE_MAX_ARGS];
    765 	va_list ap;
    766 
    767 	va_start(ap, version);
    768 	wl_argument_from_va_list(proxy->object.interface->methods[opcode].signature,
    769 				 args, WL_CLOSURE_MAX_ARGS, ap);
    770 	va_end(ap);
    771 
    772 	return wl_proxy_marshal_array_constructor_versioned(proxy, opcode,
    773 							    args, interface,
    774 							    version);
    775 }
    776 
    777 /** Prepare a request to be sent to the compositor
    778  *
    779  * \param proxy The proxy object
    780  * \param opcode Opcode of the request to be sent
    781  * \param args Extra arguments for the given request
    782  *
    783  * This function is similar to wl_proxy_marshal_array_constructor(), except
    784  * it doesn't create proxies for new-id arguments.
    785  *
    786  * \note This is intended to be used by language bindings and not in
    787  * non-generated code.
    788  *
    789  * \sa wl_proxy_marshal()
    790  *
    791  * \memberof wl_proxy
    792  */
    793 WL_EXPORT void
    794 wl_proxy_marshal_array(struct wl_proxy *proxy, uint32_t opcode,
    795 		       union wl_argument *args)
    796 {
    797 	wl_proxy_marshal_array_constructor(proxy, opcode, args, NULL);
    798 }
    799 
    800 static void
    801 display_handle_error(void *data,
    802 		     struct wl_display *display, void *object,
    803 		     uint32_t code, const char *message)
    804 {
    805 	struct wl_proxy *proxy = object;
    806 	uint32_t object_id;
    807 	const struct wl_interface *interface;
    808 
    809 	if (proxy) {
    810 		wl_log("%s@%u: error %d: %s\n",
    811 		       proxy->object.interface->name,
    812 		       proxy->object.id,
    813 		       code, message);
    814 
    815 		object_id = proxy->object.id;
    816 		interface = proxy->object.interface;
    817 	} else {
    818 		wl_log("[destroyed object]: error %d: %s\n",
    819 		       code, message);
    820 
    821 		object_id = 0;
    822 		interface = NULL;
    823 	}
    824 
    825 	display_protocol_error(display, code, object_id, interface);
    826 }
    827 
    828 static void
    829 display_handle_delete_id(void *data, struct wl_display *display, uint32_t id)
    830 {
    831 	struct wl_proxy *proxy;
    832 
    833 	pthread_mutex_lock(&display->mutex);
    834 
    835 	proxy = wl_map_lookup(&display->objects, id);
    836 
    837 	if (!proxy)
    838 		wl_log("error: received delete_id for unknown id (%u)\n", id);
    839 
    840 	if (proxy && proxy != WL_ZOMBIE_OBJECT)
    841 		proxy->flags |= WL_PROXY_FLAG_ID_DELETED;
    842 	else
    843 		wl_map_remove(&display->objects, id);
    844 
    845 	pthread_mutex_unlock(&display->mutex);
    846 }
    847 
    848 static const struct wl_display_listener display_listener = {
    849 	display_handle_error,
    850 	display_handle_delete_id
    851 };
    852 
    853 static int
    854 connect_to_socket(const char *name)
    855 {
    856 	struct sockaddr_un addr;
    857 	socklen_t size;
    858 	const char *runtime_dir;
    859 	int name_size, fd;
    860 
    861 	runtime_dir = getenv("XDG_RUNTIME_DIR");
    862 	if (!runtime_dir) {
    863 		wl_log("error: XDG_RUNTIME_DIR not set in the environment.\n");
    864 		/* to prevent programs reporting
    865 		 * "failed to create display: Success" */
    866 		errno = ENOENT;
    867 		return -1;
    868 	}
    869 
    870 	if (name == NULL)
    871 		name = getenv("WAYLAND_DISPLAY");
    872 	if (name == NULL)
    873 		name = "wayland-0";
    874 
    875 	fd = wl_os_socket_cloexec(PF_LOCAL, SOCK_STREAM, 0);
    876 	if (fd < 0)
    877 		return -1;
    878 
    879 	memset(&addr, 0, sizeof addr);
    880 	addr.sun_family = AF_LOCAL;
    881 	name_size =
    882 		snprintf(addr.sun_path, sizeof addr.sun_path,
    883 			 "%s/%s", runtime_dir, name) + 1;
    884 
    885 	assert(name_size > 0);
    886 	if (name_size > (int)sizeof addr.sun_path) {
    887 		wl_log("error: socket path \"%s/%s\" plus null terminator"
    888 		       " exceeds 108 bytes\n", runtime_dir, name);
    889 		close(fd);
    890 		/* to prevent programs reporting
    891 		 * "failed to add socket: Success" */
    892 		errno = ENAMETOOLONG;
    893 		return -1;
    894 	};
    895 
    896 	size = offsetof (struct sockaddr_un, sun_path) + name_size;
    897 
    898 	if (connect(fd, (struct sockaddr *) &addr, size) < 0) {
    899 		close(fd);
    900 		return -1;
    901 	}
    902 
    903 	return fd;
    904 }
    905 
    906 /** Connect to Wayland display on an already open fd
    907  *
    908  * \param fd The fd to use for the connection
    909  * \return A \ref wl_display object or \c NULL on failure
    910  *
    911  * The wl_display takes ownership of the fd and will close it when the
    912  * display is destroyed.  The fd will also be closed in case of
    913  * failure.
    914  *
    915  * \memberof wl_display
    916  */
    917 WL_EXPORT struct wl_display *
    918 wl_display_connect_to_fd(int fd)
    919 {
    920 	struct wl_display *display;
    921 	const char *debug;
    922 
    923 	debug = getenv("WAYLAND_DEBUG");
    924 	if (debug && (strstr(debug, "client") || strstr(debug, "1")))
    925 		debug_client = 1;
    926 
    927 	display = zalloc(sizeof *display);
    928 	if (display == NULL) {
    929 		close(fd);
    930 		return NULL;
    931 	}
    932 
    933 	display->fd = fd;
    934 	wl_map_init(&display->objects, WL_MAP_CLIENT_SIDE);
    935 	wl_event_queue_init(&display->default_queue, display);
    936 	wl_event_queue_init(&display->display_queue, display);
    937 	pthread_mutex_init(&display->mutex, NULL);
    938 	pthread_cond_init(&display->reader_cond, NULL);
    939 	display->reader_count = 0;
    940 
    941 	wl_map_insert_new(&display->objects, 0, NULL);
    942 
    943 	display->proxy.object.interface = &wl_display_interface;
    944 	display->proxy.object.id =
    945 		wl_map_insert_new(&display->objects, 0, display);
    946 	display->proxy.display = display;
    947 	display->proxy.object.implementation = (void(**)(void)) &display_listener;
    948 	display->proxy.user_data = display;
    949 	display->proxy.queue = &display->default_queue;
    950 	display->proxy.flags = 0;
    951 	display->proxy.refcount = 1;
    952 
    953 	/* We set this version to 0 for backwards compatibility.
    954 	 *
    955 	 * If a client is using old versions of protocol headers,
    956 	 * it will use unversioned API to create proxies.  Those
    957 	 * proxies will inherit this 0.
    958 	 *
    959 	 * A client could be passing these proxies into library
    960 	 * code newer than the headers that checks proxy
    961 	 * versions.  When the proxy version is reported as 0
    962 	 * the library will know that it can't reliably determine
    963 	 * the proxy version, and should do whatever fallback is
    964 	 * required.
    965 	 *
    966 	 * This trick forces wl_display to always report 0, but
    967 	 * since it's a special object that we can't bind
    968 	 * specific versions of anyway, this should be fine.
    969 	 */
    970 	display->proxy.version = 0;
    971 
    972 	display->connection = wl_connection_create(display->fd);
    973 	if (display->connection == NULL)
    974 		goto err_connection;
    975 
    976 	return display;
    977 
    978  err_connection:
    979 	pthread_mutex_destroy(&display->mutex);
    980 	pthread_cond_destroy(&display->reader_cond);
    981 	wl_map_release(&display->objects);
    982 	close(display->fd);
    983 	free(display);
    984 
    985 	return NULL;
    986 }
    987 
    988 /** Connect to a Wayland display
    989  *
    990  * \param name Name of the Wayland display to connect to
    991  * \return A \ref wl_display object or \c NULL on failure
    992  *
    993  * Connect to the Wayland display named \c name. If \c name is \c NULL,
    994  * its value will be replaced with the WAYLAND_DISPLAY environment
    995  * variable if it is set, otherwise display "wayland-0" will be used.
    996  *
    997  * \memberof wl_display
    998  */
    999 WL_EXPORT struct wl_display *
   1000 wl_display_connect(const char *name)
   1001 {
   1002 	char *connection, *end;
   1003 	int flags, fd;
   1004 
   1005 	connection = getenv("WAYLAND_SOCKET");
   1006 	if (connection) {
   1007 		int prev_errno = errno;
   1008 		errno = 0;
   1009 		fd = strtol(connection, &end, 0);
   1010 		if (errno != 0 || connection == end || *end != '\0')
   1011 			return NULL;
   1012 		errno = prev_errno;
   1013 
   1014 		flags = fcntl(fd, F_GETFD);
   1015 		if (flags != -1)
   1016 			fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
   1017 		unsetenv("WAYLAND_SOCKET");
   1018 	} else {
   1019 		fd = connect_to_socket(name);
   1020 		if (fd < 0)
   1021 			return NULL;
   1022 	}
   1023 
   1024 	return wl_display_connect_to_fd(fd);
   1025 }
   1026 
   1027 /** Close a connection to a Wayland display
   1028  *
   1029  * \param display The display context object
   1030  *
   1031  * Close the connection to \c display and free all resources associated
   1032  * with it.
   1033  *
   1034  * \memberof wl_display
   1035  */
   1036 WL_EXPORT void
   1037 wl_display_disconnect(struct wl_display *display)
   1038 {
   1039 	wl_connection_destroy(display->connection);
   1040 	wl_map_release(&display->objects);
   1041 	wl_event_queue_release(&display->default_queue);
   1042 	wl_event_queue_release(&display->display_queue);
   1043 	pthread_mutex_destroy(&display->mutex);
   1044 	pthread_cond_destroy(&display->reader_cond);
   1045 	close(display->fd);
   1046 
   1047 	free(display);
   1048 }
   1049 
   1050 /** Get a display context's file descriptor
   1051  *
   1052  * \param display The display context object
   1053  * \return Display object file descriptor
   1054  *
   1055  * Return the file descriptor associated with a display so it can be
   1056  * integrated into the client's main loop.
   1057  *
   1058  * \memberof wl_display
   1059  */
   1060 WL_EXPORT int
   1061 wl_display_get_fd(struct wl_display *display)
   1062 {
   1063 	return display->fd;
   1064 }
   1065 
   1066 static void
   1067 sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
   1068 {
   1069 	int *done = data;
   1070 
   1071 	*done = 1;
   1072 	wl_callback_destroy(callback);
   1073 }
   1074 
   1075 static const struct wl_callback_listener sync_listener = {
   1076 	sync_callback
   1077 };
   1078 
   1079 /** Block until all pending request are processed by the server
   1080  *
   1081  * \param display The display context object
   1082  * \param queue The queue on which to run the roundtrip
   1083  * \return The number of dispatched events on success or -1 on failure
   1084  *
   1085  * This function blocks until the server has processed all currently issued
   1086  * requests by sending a request to the display server and waiting for a
   1087  * reply before returning.
   1088  *
   1089  * This function uses wl_display_dispatch_queue() internally. It is not allowed
   1090  * to call this function while the thread is being prepared for reading events,
   1091  * and doing so will cause a dead lock.
   1092  *
   1093  * \note This function may dispatch other events being received on the given
   1094  * queue.
   1095  *
   1096  * \sa wl_display_roundtrip()
   1097  * \memberof wl_display
   1098  */
   1099 WL_EXPORT int
   1100 wl_display_roundtrip_queue(struct wl_display *display, struct wl_event_queue *queue)
   1101 {
   1102 	struct wl_display *display_wrapper;
   1103 	struct wl_callback *callback;
   1104 	int done, ret = 0;
   1105 
   1106 	done = 0;
   1107 
   1108 	display_wrapper = wl_proxy_create_wrapper(display);
   1109 	if (!display_wrapper)
   1110 		return -1;
   1111 
   1112 	wl_proxy_set_queue((struct wl_proxy *) display_wrapper, queue);
   1113 	callback = wl_display_sync(display_wrapper);
   1114 	wl_proxy_wrapper_destroy(display_wrapper);
   1115 
   1116 	if (callback == NULL)
   1117 		return -1;
   1118 
   1119 	wl_callback_add_listener(callback, &sync_listener, &done);
   1120 	while (!done && ret >= 0)
   1121 		ret = wl_display_dispatch_queue(display, queue);
   1122 
   1123 	if (ret == -1 && !done)
   1124 		wl_callback_destroy(callback);
   1125 
   1126 	return ret;
   1127 }
   1128 
   1129 /** Block until all pending request are processed by the server
   1130  *
   1131  * \param display The display context object
   1132  * \return The number of dispatched events on success or -1 on failure
   1133  *
   1134  * This function blocks until the server has processed all currently issued
   1135  * requests by sending a request to the display server and waiting for a reply
   1136  * before returning.
   1137  *
   1138  * This function uses wl_display_dispatch_queue() internally. It is not allowed
   1139  * to call this function while the thread is being prepared for reading events,
   1140  * and doing so will cause a dead lock.
   1141  *
   1142  * \note This function may dispatch other events being received on the default
   1143  * queue.
   1144  *
   1145  * \memberof wl_display
   1146  */
   1147 WL_EXPORT int
   1148 wl_display_roundtrip(struct wl_display *display)
   1149 {
   1150 	return wl_display_roundtrip_queue(display, &display->default_queue);
   1151 }
   1152 
   1153 static int
   1154 create_proxies(struct wl_proxy *sender, struct wl_closure *closure)
   1155 {
   1156 	struct wl_proxy *proxy;
   1157 	const char *signature;
   1158 	struct argument_details arg;
   1159 	uint32_t id;
   1160 	int i;
   1161 	int count;
   1162 
   1163 	signature = closure->message->signature;
   1164 	count = arg_count_for_signature(signature);
   1165 	for (i = 0; i < count; i++) {
   1166 		signature = get_next_argument(signature, &arg);
   1167 		switch (arg.type) {
   1168 		case 'n':
   1169 			id = closure->args[i].n;
   1170 			if (id == 0) {
   1171 				closure->args[i].o = NULL;
   1172 				break;
   1173 			}
   1174 			proxy = wl_proxy_create_for_id(sender, id,
   1175 						       closure->message->types[i]);
   1176 			if (proxy == NULL)
   1177 				return -1;
   1178 			closure->args[i].o = (struct wl_object *)proxy;
   1179 			break;
   1180 		default:
   1181 			break;
   1182 		}
   1183 	}
   1184 
   1185 	return 0;
   1186 }
   1187 
   1188 static void
   1189 increase_closure_args_refcount(struct wl_closure *closure)
   1190 {
   1191 	const char *signature;
   1192 	struct argument_details arg;
   1193 	int i, count;
   1194 	struct wl_proxy *proxy;
   1195 
   1196 	signature = closure->message->signature;
   1197 	count = arg_count_for_signature(signature);
   1198 	for (i = 0; i < count; i++) {
   1199 		signature = get_next_argument(signature, &arg);
   1200 		switch (arg.type) {
   1201 		case 'n':
   1202 		case 'o':
   1203 			proxy = (struct wl_proxy *) closure->args[i].o;
   1204 			if (proxy)
   1205 				proxy->refcount++;
   1206 			break;
   1207 		default:
   1208 			break;
   1209 		}
   1210 	}
   1211 }
   1212 
   1213 static int
   1214 queue_event(struct wl_display *display, int len)
   1215 {
   1216 	uint32_t p[2], id;
   1217 	int opcode, size;
   1218 	struct wl_proxy *proxy;
   1219 	struct wl_closure *closure;
   1220 	const struct wl_message *message;
   1221 	struct wl_event_queue *queue;
   1222 
   1223 	wl_connection_copy(display->connection, p, sizeof p);
   1224 	id = p[0];
   1225 	opcode = p[1] & 0xffff;
   1226 	size = p[1] >> 16;
   1227 	if (len < size)
   1228 		return 0;
   1229 
   1230 	proxy = wl_map_lookup(&display->objects, id);
   1231 	if (proxy == WL_ZOMBIE_OBJECT) {
   1232 		wl_connection_consume(display->connection, size);
   1233 		return size;
   1234 	} else if (proxy == NULL) {
   1235 		wl_connection_consume(display->connection, size);
   1236 		return size;
   1237 	}
   1238 
   1239 	message = &proxy->object.interface->events[opcode];
   1240 	closure = wl_connection_demarshal(display->connection, size,
   1241 					  &display->objects, message);
   1242 	if (!closure)
   1243 		return -1;
   1244 
   1245 	if (create_proxies(proxy, closure) < 0) {
   1246 		wl_closure_destroy(closure);
   1247 		return -1;
   1248 	}
   1249 
   1250 	if (wl_closure_lookup_objects(closure, &display->objects) != 0) {
   1251 		wl_closure_destroy(closure);
   1252 		return -1;
   1253 	}
   1254 
   1255 	increase_closure_args_refcount(closure);
   1256 	proxy->refcount++;
   1257 	closure->proxy = proxy;
   1258 
   1259 	if (proxy == &display->proxy)
   1260 		queue = &display->display_queue;
   1261 	else
   1262 		queue = proxy->queue;
   1263 
   1264 	wl_list_insert(queue->event_list.prev, &closure->link);
   1265 
   1266 	return size;
   1267 }
   1268 
   1269 static void
   1270 dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
   1271 {
   1272 	struct wl_closure *closure;
   1273 	struct wl_proxy *proxy;
   1274 	int opcode;
   1275 	bool proxy_destroyed;
   1276 
   1277 	closure = container_of(queue->event_list.next,
   1278 			       struct wl_closure, link);
   1279 	wl_list_remove(&closure->link);
   1280 	opcode = closure->opcode;
   1281 
   1282 	/* Verify that the receiving object is still valid by checking if has
   1283 	 * been destroyed by the application. */
   1284 
   1285 	decrease_closure_args_refcount(closure);
   1286 	proxy = closure->proxy;
   1287 	proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
   1288 
   1289 	proxy->refcount--;
   1290 	if (proxy_destroyed) {
   1291 		if (!proxy->refcount)
   1292 			free(proxy);
   1293 
   1294 		wl_closure_destroy(closure);
   1295 		return;
   1296 	}
   1297 
   1298 	pthread_mutex_unlock(&display->mutex);
   1299 
   1300 	if (proxy->dispatcher) {
   1301 		if (debug_client)
   1302 			wl_closure_print(closure, &proxy->object, false);
   1303 
   1304 		wl_closure_dispatch(closure, proxy->dispatcher,
   1305 				    &proxy->object, opcode);
   1306 	} else if (proxy->object.implementation) {
   1307 		if (debug_client)
   1308 			wl_closure_print(closure, &proxy->object, false);
   1309 
   1310 		wl_closure_invoke(closure, WL_CLOSURE_INVOKE_CLIENT,
   1311 				  &proxy->object, opcode, proxy->user_data);
   1312 	}
   1313 
   1314 	wl_closure_destroy(closure);
   1315 
   1316 	pthread_mutex_lock(&display->mutex);
   1317 }
   1318 
   1319 static int
   1320 read_events(struct wl_display *display)
   1321 {
   1322 	int total, rem, size;
   1323 	uint32_t serial;
   1324 
   1325 	display->reader_count--;
   1326 	if (display->reader_count == 0) {
   1327 		total = wl_connection_read(display->connection);
   1328 		if (total == -1) {
   1329 			if (errno == EAGAIN) {
   1330 				/* we must wake up threads whenever
   1331 				 * the reader_count dropped to 0 */
   1332 				display_wakeup_threads(display);
   1333 
   1334 				return 0;
   1335 			}
   1336 
   1337 			display_fatal_error(display, errno);
   1338 			return -1;
   1339 		} else if (total == 0) {
   1340 			/* The compositor has closed the socket. This
   1341 			 * should be considered an error so we'll fake
   1342 			 * an errno */
   1343 			errno = EPIPE;
   1344 			display_fatal_error(display, errno);
   1345 			return -1;
   1346 		}
   1347 
   1348 		for (rem = total; rem >= 8; rem -= size) {
   1349 			size = queue_event(display, rem);
   1350 			if (size == -1) {
   1351 				display_fatal_error(display, errno);
   1352 				return -1;
   1353 			} else if (size == 0) {
   1354 				break;
   1355 			}
   1356 		}
   1357 
   1358 		display_wakeup_threads(display);
   1359 	} else {
   1360 		serial = display->read_serial;
   1361 		while (display->read_serial == serial)
   1362 			pthread_cond_wait(&display->reader_cond,
   1363 					  &display->mutex);
   1364 
   1365 		if (display->last_error) {
   1366 			errno = display->last_error;
   1367 			return -1;
   1368 		}
   1369 	}
   1370 
   1371 	return 0;
   1372 }
   1373 
   1374 static void
   1375 cancel_read(struct wl_display *display)
   1376 {
   1377 	display->reader_count--;
   1378 	if (display->reader_count == 0)
   1379 		display_wakeup_threads(display);
   1380 }
   1381 
   1382 /** Read events from display file descriptor
   1383  *
   1384  * \param display The display context object
   1385  * \return 0 on success or -1 on error.  In case of error errno will
   1386  * be set accordingly
   1387  *
   1388  * Calling this function will result in data available on the display file
   1389  * descriptor being read and read events will be queued on their corresponding
   1390  * event queues.
   1391  *
   1392  * Before calling this function, depending on what thread it is to be called
   1393  * from, wl_display_prepare_read_queue() or wl_display_prepare_read() needs to
   1394  * be called. See wl_display_prepare_read_queue() for more details.
   1395  *
   1396  * When being called at a point where other threads have been prepared to read
   1397  * (using wl_display_prepare_read_queue() or wl_display_prepare_read()) this
   1398  * function will sleep until all other prepared threads have either been
   1399  * cancelled (using wl_display_cancel_read()) or them self entered this
   1400  * function. The last thread that calls this function will then read and queue
   1401  * events on their corresponding event queues, and finally wake up all other
   1402  * wl_display_read_events() calls causing them to return.
   1403  *
   1404  * If a thread cancels a read preparation when all other threads that have
   1405  * prepared to read has either called wl_display_cancel_read() or
   1406  * wl_display_read_events(), all reader threads will return without having read
   1407  * any data.
   1408  *
   1409  * To dispatch events that may have been queued, call
   1410  * wl_display_dispatch_pending() or wl_display_dispatch_queue_pending().
   1411  *
   1412  * \sa wl_display_prepare_read(), wl_display_cancel_read(),
   1413  * wl_display_dispatch_pending(), wl_display_dispatch()
   1414  *
   1415  * \memberof wl_display
   1416  */
   1417 WL_EXPORT int
   1418 wl_display_read_events(struct wl_display *display)
   1419 {
   1420 	int ret;
   1421 
   1422 	pthread_mutex_lock(&display->mutex);
   1423 
   1424 	if (display->last_error) {
   1425 		cancel_read(display);
   1426 		pthread_mutex_unlock(&display->mutex);
   1427 
   1428 		errno = display->last_error;
   1429 		return -1;
   1430 	}
   1431 
   1432 	ret = read_events(display);
   1433 
   1434 	pthread_mutex_unlock(&display->mutex);
   1435 
   1436 	return ret;
   1437 }
   1438 
   1439 static int
   1440 dispatch_queue(struct wl_display *display, struct wl_event_queue *queue)
   1441 {
   1442 	int count;
   1443 
   1444 	if (display->last_error)
   1445 		goto err;
   1446 
   1447 	count = 0;
   1448 	while (!wl_list_empty(&display->display_queue.event_list)) {
   1449 		dispatch_event(display, &display->display_queue);
   1450 		if (display->last_error)
   1451 			goto err;
   1452 		count++;
   1453 	}
   1454 
   1455 	while (!wl_list_empty(&queue->event_list)) {
   1456 		dispatch_event(display, queue);
   1457 		if (display->last_error)
   1458 			goto err;
   1459 		count++;
   1460 	}
   1461 
   1462 	return count;
   1463 
   1464 err:
   1465 	errno = display->last_error;
   1466 
   1467 	return -1;
   1468 }
   1469 
   1470 /** Prepare to read events from the display's file descriptor to a queue
   1471  *
   1472  * \param display The display context object
   1473  * \param queue The event queue to use
   1474  * \return 0 on success or -1 if event queue was not empty
   1475  *
   1476  * This function (or wl_display_prepare_read()) must be called before reading
   1477  * from the file descriptor using wl_display_read_events(). Calling
   1478  * wl_display_prepare_read_queue() announces the calling thread's intention to
   1479  * read and ensures that until the thread is ready to read and calls
   1480  * wl_display_read_events(), no other thread will read from the file descriptor.
   1481  * This only succeeds if the event queue is empty, and if not -1 is returned and
   1482  * errno set to EAGAIN.
   1483  *
   1484  * If a thread successfully calls wl_display_prepare_read_queue(), it must
   1485  * either call wl_display_read_events() when it's ready or cancel the read
   1486  * intention by calling wl_display_cancel_read().
   1487  *
   1488  * Use this function before polling on the display fd or integrate the fd into a
   1489  * toolkit event loop in a race-free way. A correct usage would be (with most
   1490  * error checking left out):
   1491  *
   1492  * \code
   1493  * while (wl_display_prepare_read_queue(display, queue) != 0)
   1494  *         wl_display_dispatch_queue_pending(display, queue);
   1495  * wl_display_flush(display);
   1496  *
   1497  * ret = poll(fds, nfds, -1);
   1498  * if (has_error(ret))
   1499  *         wl_display_cancel_read(display);
   1500  * else
   1501  *         wl_display_read_events(display);
   1502  *
   1503  * wl_display_dispatch_queue_pending(display, queue);
   1504  * \endcode
   1505  *
   1506  * Here we call wl_display_prepare_read_queue(), which ensures that between
   1507  * returning from that call and eventually calling wl_display_read_events(), no
   1508  * other thread will read from the fd and queue events in our queue. If the call
   1509  * to wl_display_prepare_read_queue() fails, we dispatch the pending events and
   1510  * try again until we're successful.
   1511  *
   1512  * The wl_display_prepare_read_queue() function doesn't acquire exclusive access
   1513  * to the display's fd. It only registers that the thread calling this function
   1514  * has intention to read from fd. When all registered readers call
   1515  * wl_display_read_events(), only one (at random) eventually reads and queues
   1516  * the events and the others are sleeping meanwhile. This way we avoid races and
   1517  * still can read from more threads.
   1518  *
   1519  * \sa wl_display_cancel_read(), wl_display_read_events(),
   1520  * wl_display_prepare_read()
   1521  *
   1522  * \memberof wl_display
   1523  */
   1524 WL_EXPORT int
   1525 wl_display_prepare_read_queue(struct wl_display *display,
   1526 			      struct wl_event_queue *queue)
   1527 {
   1528 	int ret;
   1529 
   1530 	pthread_mutex_lock(&display->mutex);
   1531 
   1532 	if (!wl_list_empty(&queue->event_list)) {
   1533 		errno = EAGAIN;
   1534 		ret = -1;
   1535 	} else {
   1536 		display->reader_count++;
   1537 		ret = 0;
   1538 	}
   1539 
   1540 	pthread_mutex_unlock(&display->mutex);
   1541 
   1542 	return ret;
   1543 }
   1544 
   1545 /** Prepare to read events from the display's file descriptor
   1546  *
   1547  * \param display The display context object
   1548  * \return 0 on success or -1 if event queue was not empty
   1549  *
   1550  * This function does the same thing as wl_display_prepare_read_queue()
   1551  * with the default queue passed as the queue.
   1552  *
   1553  * \sa wl_display_prepare_read_queue
   1554  * \memberof wl_display
   1555  */
   1556 WL_EXPORT int
   1557 wl_display_prepare_read(struct wl_display *display)
   1558 {
   1559 	return wl_display_prepare_read_queue(display, &display->default_queue);
   1560 }
   1561 
   1562 /** Cancel read intention on display's fd
   1563  *
   1564  * \param display The display context object
   1565  *
   1566  * After a thread successfully called wl_display_prepare_read() it must
   1567  * either call wl_display_read_events() or wl_display_cancel_read().
   1568  * If the threads do not follow this rule it will lead to deadlock.
   1569  *
   1570  * \sa wl_display_prepare_read(), wl_display_read_events()
   1571  *
   1572  * \memberof wl_display
   1573  */
   1574 WL_EXPORT void
   1575 wl_display_cancel_read(struct wl_display *display)
   1576 {
   1577 	pthread_mutex_lock(&display->mutex);
   1578 
   1579 	cancel_read(display);
   1580 
   1581 	pthread_mutex_unlock(&display->mutex);
   1582 }
   1583 
   1584 static int
   1585 wl_display_poll(struct wl_display *display, short int events)
   1586 {
   1587 	int ret;
   1588 	struct pollfd pfd[1];
   1589 
   1590 	pfd[0].fd = display->fd;
   1591 	pfd[0].events = events;
   1592 	do {
   1593 		ret = poll(pfd, 1, -1);
   1594 	} while (ret == -1 && errno == EINTR);
   1595 
   1596 	return ret;
   1597 }
   1598 
   1599 /** Dispatch events in an event queue
   1600  *
   1601  * \param display The display context object
   1602  * \param queue The event queue to dispatch
   1603  * \return The number of dispatched events on success or -1 on failure
   1604  *
   1605  * Dispatch events on the given event queue.
   1606  *
   1607  * If the given event queue is empty, this function blocks until there are
   1608  * events to be read from the display fd. Events are read and queued on
   1609  * the appropriate event queues. Finally, events on given event queue are
   1610  * dispatched. On failure -1 is returned and errno set appropriately.
   1611  *
   1612  * In a multi threaded environment, do not manually wait using poll() (or
   1613  * equivalent) before calling this function, as doing so might cause a dead
   1614  * lock. If external reliance on poll() (or equivalent) is required, see
   1615  * wl_display_prepare_read_queue() of how to do so.
   1616  *
   1617  * This function is thread safe as long as it dispatches the right queue on the
   1618  * right thread. It is also compatible with the multi thread event reading
   1619  * preparation API (see wl_display_prepare_read_queue()), and uses the
   1620  * equivalent functionality internally. It is not allowed to call this function
   1621  * while the thread is being prepared for reading events, and doing so will
   1622  * cause a dead lock.
   1623  *
   1624  * It can be used as a helper function to ease the procedure of reading and
   1625  * dispatching events.
   1626  *
   1627  * \note Since Wayland 1.5 the display has an extra queue
   1628  * for its own events (i. e. delete_id). This queue is dispatched always,
   1629  * no matter what queue we passed as an argument to this function.
   1630  * That means that this function can return non-0 value even when it
   1631  * haven't dispatched any event for the given queue.
   1632  *
   1633  * \sa wl_display_dispatch(), wl_display_dispatch_pending(),
   1634  * wl_display_dispatch_queue_pending(), wl_display_prepare_read_queue()
   1635  *
   1636  * \memberof wl_display
   1637  */
   1638 WL_EXPORT int
   1639 wl_display_dispatch_queue(struct wl_display *display,
   1640 			  struct wl_event_queue *queue)
   1641 {
   1642 	int ret;
   1643 
   1644 	if (wl_display_prepare_read_queue(display, queue) == -1)
   1645 		return wl_display_dispatch_queue_pending(display, queue);
   1646 
   1647 	while (true) {
   1648 		ret = wl_display_flush(display);
   1649 
   1650 		if (ret != -1 || errno != EAGAIN)
   1651 			break;
   1652 
   1653 		if (wl_display_poll(display, POLLOUT) == -1) {
   1654 			wl_display_cancel_read(display);
   1655 			return -1;
   1656 		}
   1657 	}
   1658 
   1659 	/* Don't stop if flushing hits an EPIPE; continue so we can read any
   1660 	 * protocol error that may have triggered it. */
   1661 	if (ret < 0 && errno != EPIPE) {
   1662 		wl_display_cancel_read(display);
   1663 		return -1;
   1664 	}
   1665 
   1666 	if (wl_display_poll(display, POLLIN) == -1) {
   1667 		wl_display_cancel_read(display);
   1668 		return -1;
   1669 	}
   1670 
   1671 	if (wl_display_read_events(display) == -1)
   1672 		return -1;
   1673 
   1674 	return wl_display_dispatch_queue_pending(display, queue);
   1675 }
   1676 
   1677 /** Dispatch pending events in an event queue
   1678  *
   1679  * \param display The display context object
   1680  * \param queue The event queue to dispatch
   1681  * \return The number of dispatched events on success or -1 on failure
   1682  *
   1683  * Dispatch all incoming events for objects assigned to the given
   1684  * event queue. On failure -1 is returned and errno set appropriately.
   1685  * If there are no events queued, this function returns immediately.
   1686  *
   1687  * \memberof wl_display
   1688  * \since 1.0.2
   1689  */
   1690 WL_EXPORT int
   1691 wl_display_dispatch_queue_pending(struct wl_display *display,
   1692 				  struct wl_event_queue *queue)
   1693 {
   1694 	int ret;
   1695 
   1696 	pthread_mutex_lock(&display->mutex);
   1697 
   1698 	ret = dispatch_queue(display, queue);
   1699 
   1700 	pthread_mutex_unlock(&display->mutex);
   1701 
   1702 	return ret;
   1703 }
   1704 
   1705 /** Process incoming events
   1706  *
   1707  * \param display The display context object
   1708  * \return The number of dispatched events on success or -1 on failure
   1709  *
   1710  * Dispatch events on the default event queue.
   1711  *
   1712  * If the default event queue is empty, this function blocks until there are
   1713  * events to be read from the display fd. Events are read and queued on
   1714  * the appropriate event queues. Finally, events on the default event queue
   1715  * are dispatched. On failure -1 is returned and errno set appropriately.
   1716  *
   1717  * In a multi threaded environment, do not manually wait using poll() (or
   1718  * equivalent) before calling this function, as doing so might cause a dead
   1719  * lock. If external reliance on poll() (or equivalent) is required, see
   1720  * wl_display_prepare_read_queue() of how to do so.
   1721  *
   1722  * This function is thread safe as long as it dispatches the right queue on the
   1723  * right thread. It is also compatible with the multi thread event reading
   1724  * preparation API (see wl_display_prepare_read_queue()), and uses the
   1725  * equivalent functionality internally. It is not allowed to call this function
   1726  * while the thread is being prepared for reading events, and doing so will
   1727  * cause a dead lock.
   1728  *
   1729  * \note It is not possible to check if there are events on the queue
   1730  * or not. For dispatching default queue events without blocking, see \ref
   1731  * wl_display_dispatch_pending().
   1732  *
   1733  * \sa wl_display_dispatch_pending(), wl_display_dispatch_queue(),
   1734  * wl_display_read_events()
   1735  *
   1736  * \memberof wl_display
   1737  */
   1738 WL_EXPORT int
   1739 wl_display_dispatch(struct wl_display *display)
   1740 {
   1741 	return wl_display_dispatch_queue(display, &display->default_queue);
   1742 }
   1743 
   1744 /** Dispatch default queue events without reading from the display fd
   1745  *
   1746  * \param display The display context object
   1747  * \return The number of dispatched events or -1 on failure
   1748  *
   1749  * This function dispatches events on the main event queue. It does not
   1750  * attempt to read the display fd and simply returns zero if the main
   1751  * queue is empty, i.e., it doesn't block.
   1752  *
   1753  * \sa wl_display_dispatch(), wl_display_dispatch_queue(),
   1754  * wl_display_flush()
   1755  *
   1756  * \memberof wl_display
   1757  */
   1758 WL_EXPORT int
   1759 wl_display_dispatch_pending(struct wl_display *display)
   1760 {
   1761 	return wl_display_dispatch_queue_pending(display,
   1762 						 &display->default_queue);
   1763 }
   1764 
   1765 /** Retrieve the last error that occurred on a display
   1766  *
   1767  * \param display The display context object
   1768  * \return The last error that occurred on \c display or 0 if no error occurred
   1769  *
   1770  * Return the last error that occurred on the display. This may be an error sent
   1771  * by the server or caused by the local client.
   1772  *
   1773  * \note Errors are \b fatal. If this function returns non-zero the display
   1774  * can no longer be used.
   1775  *
   1776  * \memberof wl_display
   1777  */
   1778 WL_EXPORT int
   1779 wl_display_get_error(struct wl_display *display)
   1780 {
   1781 	int ret;
   1782 
   1783 	pthread_mutex_lock(&display->mutex);
   1784 
   1785 	ret = display->last_error;
   1786 
   1787 	pthread_mutex_unlock(&display->mutex);
   1788 
   1789 	return ret;
   1790 }
   1791 
   1792 /** Retrieves the information about a protocol error:
   1793  *
   1794  * \param display    The Wayland display
   1795  * \param interface  if not NULL, stores the interface where the error occurred,
   1796  *                   or NULL, if unknown.
   1797  * \param id         if not NULL, stores the object id that generated
   1798  *                   the error, or 0, if the object id is unknown. There's no
   1799  *                   guarantee the object is still valid; the client must know
   1800  *                   if it deleted the object.
   1801  * \return           The error code as defined in the interface specification.
   1802  *
   1803  * \code
   1804  * int err = wl_display_get_error(display);
   1805  *
   1806  * if (err == EPROTO) {
   1807  *        code = wl_display_get_protocol_error(display, &interface, &id);
   1808  *        handle_error(code, interface, id);
   1809  * }
   1810  *
   1811  * ...
   1812  * \endcode
   1813  * \memberof wl_display
   1814  */
   1815 WL_EXPORT uint32_t
   1816 wl_display_get_protocol_error(struct wl_display *display,
   1817 			      const struct wl_interface **interface,
   1818 			      uint32_t *id)
   1819 {
   1820 	uint32_t ret;
   1821 
   1822 	pthread_mutex_lock(&display->mutex);
   1823 
   1824 	ret = display->protocol_error.code;
   1825 
   1826 	if (interface)
   1827 		*interface = display->protocol_error.interface;
   1828 	if (id)
   1829 		*id = display->protocol_error.id;
   1830 
   1831 	pthread_mutex_unlock(&display->mutex);
   1832 
   1833 	return ret;
   1834 }
   1835 
   1836 
   1837 /** Send all buffered requests on the display to the server
   1838  *
   1839  * \param display The display context object
   1840  * \return The number of bytes sent on success or -1 on failure
   1841  *
   1842  * Send all buffered data on the client side to the server. Clients should
   1843  * always call this function before blocking on input from the display fd.
   1844  * On success, the number of bytes sent to the server is returned. On
   1845  * failure, this function returns -1 and errno is set appropriately.
   1846  *
   1847  * wl_display_flush() never blocks.  It will write as much data as
   1848  * possible, but if all data could not be written, errno will be set
   1849  * to EAGAIN and -1 returned.  In that case, use poll on the display
   1850  * file descriptor to wait for it to become writable again.
   1851  *
   1852  * \memberof wl_display
   1853  */
   1854 WL_EXPORT int
   1855 wl_display_flush(struct wl_display *display)
   1856 {
   1857 	int ret;
   1858 
   1859 	pthread_mutex_lock(&display->mutex);
   1860 
   1861 	if (display->last_error) {
   1862 		errno = display->last_error;
   1863 		ret = -1;
   1864 	} else {
   1865 		/* We don't make EPIPE a fatal error here, so that we may try to
   1866 		 * read events after the failed flush. When the compositor sends
   1867 		 * an error it will close the socket, and if we make EPIPE fatal
   1868 		 * here we don't get a chance to process the error. */
   1869 		ret = wl_connection_flush(display->connection);
   1870 		if (ret < 0 && errno != EAGAIN && errno != EPIPE)
   1871 			display_fatal_error(display, errno);
   1872 	}
   1873 
   1874 	pthread_mutex_unlock(&display->mutex);
   1875 
   1876 	return ret;
   1877 }
   1878 
   1879 /** Set the user data associated with a proxy
   1880  *
   1881  * \param proxy The proxy object
   1882  * \param user_data The data to be associated with proxy
   1883  *
   1884  * Set the user data associated with \c proxy. When events for this
   1885  * proxy are received, \c user_data will be supplied to its listener.
   1886  *
   1887  * \memberof wl_proxy
   1888  */
   1889 WL_EXPORT void
   1890 wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data)
   1891 {
   1892 	proxy->user_data = user_data;
   1893 }
   1894 
   1895 /** Get the user data associated with a proxy
   1896  *
   1897  * \param proxy The proxy object
   1898  * \return The user data associated with proxy
   1899  *
   1900  * \memberof wl_proxy
   1901  */
   1902 WL_EXPORT void *
   1903 wl_proxy_get_user_data(struct wl_proxy *proxy)
   1904 {
   1905 	return proxy->user_data;
   1906 }
   1907 
   1908 /** Get the protocol object version of a proxy object
   1909  *
   1910  * \param proxy The proxy object
   1911  * \return The protocol object version of the proxy or 0
   1912  *
   1913  * Gets the protocol object version of a proxy object, or 0
   1914  * if the proxy was created with unversioned API.
   1915  *
   1916  * A returned value of 0 means that no version information is
   1917  * available, so the caller must make safe assumptions about
   1918  * the object's real version.
   1919  *
   1920  * wl_display's version will always return 0.
   1921  *
   1922  * \memberof wl_proxy
   1923  */
   1924 WL_EXPORT uint32_t
   1925 wl_proxy_get_version(struct wl_proxy *proxy)
   1926 {
   1927 	return proxy->version;
   1928 }
   1929 
   1930 /** Get the id of a proxy object
   1931  *
   1932  * \param proxy The proxy object
   1933  * \return The id the object associated with the proxy
   1934  *
   1935  * \memberof wl_proxy
   1936  */
   1937 WL_EXPORT uint32_t
   1938 wl_proxy_get_id(struct wl_proxy *proxy)
   1939 {
   1940 	return proxy->object.id;
   1941 }
   1942 
   1943 /** Get the interface name (class) of a proxy object
   1944  *
   1945  * \param proxy The proxy object
   1946  * \return The interface name of the object associated with the proxy
   1947  *
   1948  * \memberof wl_proxy
   1949  */
   1950 WL_EXPORT const char *
   1951 wl_proxy_get_class(struct wl_proxy *proxy)
   1952 {
   1953 	return proxy->object.interface->name;
   1954 }
   1955 
   1956 /** Assign a proxy to an event queue
   1957  *
   1958  * \param proxy The proxy object
   1959  * \param queue The event queue that will handle this proxy or NULL
   1960  *
   1961  * Assign proxy to event queue. Events coming from \c proxy will be
   1962  * queued in \c queue from now. If queue is NULL, then the display's
   1963  * default queue is set to the proxy.
   1964  *
   1965  * \note By default, the queue set in proxy is the one inherited from parent.
   1966  *
   1967  * \sa wl_display_dispatch_queue()
   1968  *
   1969  * \memberof wl_proxy
   1970  */
   1971 WL_EXPORT void
   1972 wl_proxy_set_queue(struct wl_proxy *proxy, struct wl_event_queue *queue)
   1973 {
   1974 	if (queue)
   1975 		proxy->queue = queue;
   1976 	else
   1977 		proxy->queue = &proxy->display->default_queue;
   1978 }
   1979 
   1980 /** Create a proxy wrapper for making queue assignments thread-safe
   1981  *
   1982  * \param proxy The proxy object to be wrapped
   1983  * \return A proxy wrapper for the given proxy or NULL on failure
   1984  *
   1985  * A proxy wrapper is type of 'struct wl_proxy' instance that can be used when
   1986  * sending requests instead of using the original proxy. A proxy wrapper does
   1987  * not have an implementation or dispatcher, and events received on the
   1988  * object is still emitted on the original proxy. Trying to set an
   1989  * implementation or dispatcher will have no effect but result in a warning
   1990  * being logged.
   1991  *
   1992  * Setting the proxy queue of the proxy wrapper will make new objects created
   1993  * using the proxy wrapper use the set proxy queue.
   1994  * Even though there is no implementation nor dispatcher, the proxy queue can
   1995  * be changed. This will affect the default queue of new objects created by
   1996  * requests sent via the proxy wrapper.
   1997  *
   1998  * A proxy wrapper can only be destroyed using wl_proxy_wrapper_destroy().
   1999  *
   2000  * A proxy wrapper must be destroyed before the proxy it was created from.
   2001  *
   2002  * If a user reads and dispatches events on more than one thread, it is
   2003  * necessary to use a proxy wrapper when sending requests on objects when the
   2004  * intention is that a newly created proxy is to use a proxy queue different
   2005  * from the proxy the request was sent on, as creating the new proxy and then
   2006  * setting the queue is not thread safe.
   2007  *
   2008  * For example, a module that runs using its own proxy queue that needs to
   2009  * do display roundtrip must wrap the wl_display proxy object before sending
   2010  * the wl_display.sync request. For example:
   2011  *
   2012  * \code
   2013  *
   2014  *   struct wl_event_queue *queue = ...;
   2015  *   struct wl_display *wrapped_display;
   2016  *   struct wl_callback *callback;
   2017  *
   2018  *   wrapped_display = wl_proxy_create_wrapper(display);
   2019  *   wl_proxy_set_queue((struct wl_proxy *) wrapped_display, queue);
   2020  *   callback = wl_display_sync(wrapped_display);
   2021  *   wl_proxy_wrapper_destroy(wrapped_display);
   2022  *   wl_callback_add_listener(callback, ...);
   2023  *
   2024  * \endcode
   2025  *
   2026  * \memberof wl_proxy
   2027  */
   2028 WL_EXPORT void *
   2029 wl_proxy_create_wrapper(void *proxy)
   2030 {
   2031 	struct wl_proxy *wrapped_proxy = proxy;
   2032 	struct wl_proxy *wrapper;
   2033 
   2034 	wrapper = zalloc(sizeof *wrapper);
   2035 	if (!wrapper)
   2036 		return NULL;
   2037 
   2038 	pthread_mutex_lock(&wrapped_proxy->display->mutex);
   2039 
   2040 	wrapper->object.interface = wrapped_proxy->object.interface;
   2041 	wrapper->object.id = wrapped_proxy->object.id;
   2042 	wrapper->version = wrapped_proxy->version;
   2043 	wrapper->display = wrapped_proxy->display;
   2044 	wrapper->queue = wrapped_proxy->queue;
   2045 	wrapper->flags = WL_PROXY_FLAG_WRAPPER;
   2046 	wrapper->refcount = 1;
   2047 
   2048 	pthread_mutex_unlock(&wrapped_proxy->display->mutex);
   2049 
   2050 	return wrapper;
   2051 }
   2052 
   2053 /** Destroy a proxy wrapper
   2054  * \param proxy_wrapper The proxy wrapper to be destroyed
   2055  *
   2056  * \memberof wl_proxy
   2057  */
   2058 WL_EXPORT void
   2059 wl_proxy_wrapper_destroy(void *proxy_wrapper)
   2060 {
   2061 	struct wl_proxy *wrapper = proxy_wrapper;
   2062 
   2063 	if (!(wrapper->flags & WL_PROXY_FLAG_WRAPPER))
   2064 		wl_abort("Tried to destroy non-wrapper proxy with "
   2065 			 "wl_proxy_wrapper_destroy\n");
   2066 
   2067 	assert(wrapper->refcount == 1);
   2068 
   2069 	free(wrapper);
   2070 }
   2071 
   2072 WL_EXPORT void
   2073 wl_log_set_handler_client(wl_log_func_t handler)
   2074 {
   2075 	wl_log_handler = handler;
   2076 }
   2077