diff options
author | Zach Johnson <zachoverflow@google.com> | 2014-08-04 20:47:52 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2015-03-16 16:51:28 -0700 |
commit | ed7095be083ffe47f8b9d0d3090b0f2e109b8125 (patch) | |
tree | b5399a6501666548eb9d47e1d42bc9a78afa41ce | |
parent | 3605c802486424c2fe22b3474c941f224cd56419 (diff) | |
download | android_system_bt-ed7095be083ffe47f8b9d0d3090b0f2e109b8125.tar.gz android_system_bt-ed7095be083ffe47f8b9d0d3090b0f2e109b8125.tar.bz2 android_system_bt-ed7095be083ffe47f8b9d0d3090b0f2e109b8125.zip |
Fix socket to use safe reactor registration
-rw-r--r-- | hci/src/hci_inject.c | 4 | ||||
-rw-r--r-- | osi/include/socket.h | 10 | ||||
-rw-r--r-- | osi/src/socket.c | 13 |
3 files changed, 15 insertions, 12 deletions
diff --git a/hci/src/hci_inject.c b/hci/src/hci_inject.c index b45a38cb7..78c1cc1a7 100644 --- a/hci/src/hci_inject.c +++ b/hci/src/hci_inject.c @@ -77,7 +77,7 @@ bool hci_inject_open(void) { if (!socket_listen(listen_socket, LISTEN_PORT)) goto error; - socket_register(listen_socket, thread_get_reactor(thread), accept_ready, NULL, NULL); + socket_register(listen_socket, thread, accept_ready, NULL, NULL); return true; error:; @@ -132,7 +132,7 @@ static void accept_ready(socket_t *socket, UNUSED_ATTR void *context) { return; } - socket_register(socket, thread_get_reactor(thread), read_ready, NULL, client); + socket_register(socket, thread, read_ready, NULL, client); } static void read_ready(UNUSED_ATTR socket_t *socket, void *context) { diff --git a/osi/include/socket.h b/osi/include/socket.h index ba3629156..e9ec8245c 100644 --- a/osi/include/socket.h +++ b/osi/include/socket.h @@ -21,6 +21,8 @@ #include <stddef.h> #include <stdint.h> +#include "thread.h" + typedef struct reactor_t reactor_t; typedef struct socket_t socket_t; typedef uint16_t port_t; @@ -66,13 +68,13 @@ ssize_t socket_read(const socket_t *socket, void *buf, size_t count); // may be NULL. ssize_t socket_write(const socket_t *socket, const void *buf, size_t count); -// Registers |socket| with the |reactor|. When the socket becomes readable, |read_cb| +// Registers |socket| with the |thread|. When the socket becomes readable, |read_cb| // will be called. When the socket becomes writeable, |write_cb| will be called. The // |context| parameter is passed, untouched, to each of the callback routines. Neither -// |socket| nor |reactor| may be NULL. |read_cb| or |write_cb|, but not both, may be NULL. +// |socket| nor |thread| may be NULL. |read_cb| or |write_cb|, but not both, may be NULL. // |context| may be NULL. -void socket_register(socket_t *socket, reactor_t *reactor, socket_cb read_cb, socket_cb write_cb, void *context); +void socket_register(socket_t *socket, thread_t *thread, socket_cb read_cb, socket_cb write_cb, void *context); -// Unregisters |socket| from whichever reactor it is registered with, if any. This +// Unregisters |socket| from whichever thread it is registered with, if any. This // function is idempotent. void socket_unregister(socket_t *socket); diff --git a/osi/src/socket.c b/osi/src/socket.c index 83f4a5a27..4e9a406b3 100644 --- a/osi/src/socket.c +++ b/osi/src/socket.c @@ -29,9 +29,10 @@ #include "reactor.h" #include "socket.h" +#include "thread.h" struct socket_t { - reactor_t *reactor; + thread_t *thread; reactor_object_t socket_object; socket_cb read_ready; socket_cb write_ready; @@ -132,7 +133,7 @@ ssize_t socket_write(const socket_t *socket, const void *buf, size_t count) { return send(socket->socket_object.fd, buf, count, MSG_DONTWAIT); } -void socket_register(socket_t *socket, reactor_t *reactor, socket_cb read_cb, socket_cb write_cb, void *context) { +void socket_register(socket_t *socket, thread_t *thread, socket_cb read_cb, socket_cb write_cb, void *context) { assert(socket != NULL); assert(reactor != NULL); assert(read_cb || write_cb); @@ -140,7 +141,7 @@ void socket_register(socket_t *socket, reactor_t *reactor, socket_cb read_cb, so // Make sure the socket isn't currently registered. socket_unregister(socket); - socket->reactor = reactor; + socket->thread = thread; socket->read_ready = read_cb; socket->write_ready = write_cb; socket->context = context; @@ -155,14 +156,14 @@ void socket_register(socket_t *socket, reactor_t *reactor, socket_cb read_cb, so else if (write_cb) socket->socket_object.interest = REACTOR_INTEREST_WRITE; - reactor_register(reactor, &socket->socket_object); + thread_register(thread, &socket->socket_object); } void socket_unregister(socket_t *socket) { assert(socket != NULL); - if (socket->reactor) - reactor_unregister(socket->reactor, &socket->socket_object); + if (socket->thread) + thread_unregister(socket->thread, &socket->socket_object); } static void internal_read_ready(void *context) { |