Revert "sd-bus: let sd_bus_call() use the synchronous kdbus method"

This reverts commit 021b89861d.

Something is not quite right, "KillUnit" sent from systemctl is not
handled correctly and shutdown has problems.
This commit is contained in:
Kay Sievers 2014-01-20 23:42:05 +01:00
parent 49e6fdbf14
commit 97f82db325
4 changed files with 25 additions and 75 deletions

View File

@ -251,8 +251,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
m->kdbus->flags =
((m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED) ? 0 : KDBUS_MSG_FLAGS_EXPECT_REPLY) |
((m->header->flags & BUS_MESSAGE_NO_AUTO_START) ? KDBUS_MSG_FLAGS_NO_AUTO_START : 0) |
(m->reply_sync ? KDBUS_MSG_FLAGS_SYNC_REPLY : 0);
((m->header->flags & BUS_MESSAGE_NO_AUTO_START) ? KDBUS_MSG_FLAGS_NO_AUTO_START : 0);
m->kdbus->dst_id =
well_known ? 0 :
m->destination ? unique : KDBUS_DST_ID_BROADCAST;
@ -789,39 +788,6 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m) {
return 0;
}
if (m->reply_sync) {
struct kdbus_msg *k;
k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + m->kdbus->offset_reply);
r = bus_kernel_make_message(bus, k);
if (r < 0)
return r;
}
return 1;
}
int bus_call_kernel(
sd_bus *bus,
sd_bus_message *m,
uint64_t usec,
sd_bus_error *error,
sd_bus_message **reply) {
int r;
uint64_t cookie;
m->reply_sync = !!reply;
r = sd_bus_send(bus, m, &cookie);
if (r < 0)
return r;
if (reply) {
assert(bus->rqueue_size > 0);
*reply = bus->rqueue[--bus->rqueue_size];
}
return 1;
}

View File

@ -62,7 +62,6 @@ int bus_kernel_take_fd(sd_bus *b);
int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m);
int bus_kernel_read_message(sd_bus *bus);
int bus_call_kernel(sd_bus *bus, sd_bus_message *m, uint64_t usec, sd_bus_error *error, sd_bus_message **reply);
int bus_kernel_create_bus(const char *name, bool world, char **s);
int bus_kernel_create_namespace(const char *name, char **s);

View File

@ -107,7 +107,6 @@ struct sd_bus_message {
bool free_fds:1;
bool release_kdbus:1;
bool poisoned:1;
bool reply_sync:1;
struct bus_header *header;
struct bus_body_part body;

View File

@ -1720,19 +1720,41 @@ int bus_ensure_running(sd_bus *bus) {
}
}
static int bus_call_dbus1(
_public_ int sd_bus_call(
sd_bus *bus,
sd_bus_message *m,
sd_bus_message *_m,
uint64_t usec,
sd_bus_error *error,
sd_bus_message **reply) {
_cleanup_bus_message_unref_ sd_bus_message *m = sd_bus_message_ref(_m);
usec_t timeout;
uint64_t cookie;
unsigned i;
int r;
assert_return(bus, -EINVAL);
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(m, -EINVAL);
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
assert_return(!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
assert_return(!bus_error_is_dirty(error), -EINVAL);
assert_return(!bus_pid_changed(bus), -ECHILD);
r = bus_ensure_running(bus);
if (r < 0)
return r;
i = bus->rqueue_size;
r = bus_seal_message(bus, m, usec);
if (r < 0)
return r;
r = bus_remarshal_message(bus, &m);
if (r < 0)
return r;
r = sd_bus_send(bus, m, &cookie);
if (r < 0)
return r;
@ -1831,42 +1853,6 @@ static int bus_call_dbus1(
}
}
_public_ int sd_bus_call(
sd_bus *bus,
sd_bus_message *_m,
uint64_t usec,
sd_bus_error *error,
sd_bus_message **reply) {
_cleanup_bus_message_unref_ sd_bus_message *m = sd_bus_message_ref(_m);
int r;
assert_return(bus, -EINVAL);
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(m, -EINVAL);
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
assert_return(!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
assert_return(!bus_error_is_dirty(error), -EINVAL);
assert_return(!bus_pid_changed(bus), -ECHILD);
r = bus_ensure_running(bus);
if (r < 0)
return r;
r = bus_seal_message(bus, m, usec);
if (r < 0)
return r;
r = bus_remarshal_message(bus, &m);
if (r < 0)
return r;
if (bus->is_kernel)
return bus_call_kernel(bus, m, usec, error, reply);
else
return bus_call_dbus1(bus, m, usec, error, reply);
}
_public_ int sd_bus_get_fd(sd_bus *bus) {
assert_return(bus, -EINVAL);