X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-internal.h;h=30b8d519a0a653bf55641ab52db46f8e3cac12c9;hb=a0f9c810faa022c264bf534ab9495e0e9f617962;hp=0edb09764af2800263a51367adb7c3046dd1bc47;hpb=e4ee6e5cc3e8e23e1ecc0d9fa756d9cc2534d218;p=elogind.git diff --git a/src/libsystemd-bus/bus-internal.h b/src/libsystemd-bus/bus-internal.h index 0edb09764..30b8d519a 100644 --- a/src/libsystemd-bus/bus-internal.h +++ b/src/libsystemd-bus/bus-internal.h @@ -24,6 +24,7 @@ #include #include #include +#include #include "hashmap.h" #include "prioq.h" @@ -68,9 +69,14 @@ enum bus_state { BUS_OPENING, BUS_AUTHENTICATING, BUS_HELLO, - BUS_RUNNING + BUS_RUNNING, + BUS_CLOSED }; +static inline bool BUS_IS_OPEN(enum bus_state state) { + return state > BUS_UNSET && state < BUS_CLOSED; +} + enum bus_auth { _BUS_AUTH_INVALID, BUS_AUTH_EXTERNAL, @@ -93,7 +99,6 @@ struct sd_bus { int message_version; bool is_kernel:1; - bool negotiate_fds:1; bool can_fds:1; bool bus_client:1; bool ucred_valid:1; @@ -106,6 +111,8 @@ struct sd_bus { bool filter_callbacks_modified:1; bool object_callbacks_modified:1; + int use_memfd; + void *rbuffer; size_t rbuffer_size; @@ -164,8 +171,21 @@ struct sd_bus { void *kdbus_buffer; + /* We do locking around the memfd cache, since we want to + * allow people to process a sd_bus_message in a different + * thread then it was generated on and free it there. Since + * adding something to the memfd cache might happen when a + * message is released, we hence need to protect this bit with + * a mutex. */ + pthread_mutex_t memfd_cache_mutex; struct memfd_cache memfd_cache[MEMFD_CACHE_MAX]; unsigned n_memfd_cache; + + pid_t original_pid; + + uint64_t hello_flags; + + uint64_t match_cookie; }; static inline void bus_unrefp(sd_bus **b) { @@ -212,3 +232,5 @@ const char *bus_message_type_to_string(uint8_t u); int bus_ensure_running(sd_bus *bus); int bus_start_running(sd_bus *bus); int bus_next_address(sd_bus *bus); + +bool bus_pid_changed(sd_bus *bus);