Skip to content

Commit 4ef4839

Browse files
some more speretation of method memory so can run in parellel
1 parent 79f59ca commit 4ef4839

File tree

6 files changed

+1202
-1226
lines changed

6 files changed

+1202
-1226
lines changed

adbus/sdbus.c

Lines changed: 1175 additions & 1203 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

adbus/sdbus/error.pyx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
cdef class Error:
44
cdef sdbus_h.sd_bus_error _e
55

6-
cdef reply_from_exception(self, sdbus_h.sd_bus_message *call,
7-
Exception exception):
6+
cdef reply_from_exception(self, Message call, Exception exception):
87
cdef int errno
98
cdef int ret
109

@@ -15,6 +14,6 @@ cdef class Error:
1514
cdef bytes err_message = str(exception).encode('utf-8')
1615

1716
sdbus_h.sd_bus_error_set(&self._e, err_name, err_message)
18-
ret = sdbus_h.sd_bus_reply_method_error(call, &self._e)
17+
ret = sdbus_h.sd_bus_reply_method_error(call._m, &self._e)
1918
if ret < 0:
2019
raise SdbusError(f"Failed to send error reply: {errorcode[-ret]}", -ret)

adbus/sdbus/message.pyx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ cdef class Message:
2929
self._m = sdbus_h.sd_bus_message_unref(self._m)
3030
self._m = sdbus_h.sd_bus_message_ref(message)
3131

32-
cdef new_method_return(self, sdbus_h.sd_bus_message *call):
32+
cdef new_method_return(self):
3333
cdef int ret
34+
cdef sdbus_h.sd_bus_message *call = self._m
3435
self._m = sdbus_h.sd_bus_message_unref(self._m)
3536
ret = sdbus_h.sd_bus_message_new_method_return(call, &self._m)
3637
if ret < 0:

adbus/sdbus/method.pyx

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,41 @@
11
# == Copyright: 2017, CCX Technologies
22

3-
cdef int method_message_handler(sdbus_h.sd_bus_message *m,
4-
void *userdata, sdbus_h.sd_bus_error *err):
5-
6-
cdef PyObject *method_ptr = (((<PyObject**>userdata)[0]))
7-
cdef Method method = <Method>method_ptr
8-
cdef Message message = Message()
3+
cdef void _method_message_handler(Method method, Message message):
94
cdef Error error
105
cdef list args
116
cdef object value
127

13-
message.import_sd_bus_message(m)
148
args = message.read(method.arg_signature)
159

1610
try:
1711
value = method.callback(*args)
1812
except Exception as e:
13+
method.exceptions.append(e)
1914
error = Error()
2015
try:
21-
error.reply_from_exception(m, e)
16+
error.reply_from_exception(message, e)
2217
except SdbusError as e:
23-
return -e.errno
24-
else:
25-
return 1
26-
finally:
2718
method.exceptions.append(e)
19+
return
2820

29-
message.new_method_return(m)
21+
message.new_method_return()
3022
message.append(method.return_signature, value)
3123

3224
try:
3325
message.send()
3426
except SdbusError as e:
35-
return -e.errno
36-
else:
37-
return 1
27+
method.exceptions.append(e)
28+
29+
cdef int method_message_handler(sdbus_h.sd_bus_message *m,
30+
void *userdata, sdbus_h.sd_bus_error *err):
31+
32+
cdef PyObject *method_ptr = (((<PyObject**>userdata)[0]))
33+
cdef Method method = <Method>method_ptr
34+
cdef Message message = Message()
35+
36+
message.import_sd_bus_message(m)
37+
_method_message_handler(method, message)
38+
return 1
3839

3940
cdef class Method:
4041

adbus/sdbus/property.pyx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ cdef int property_get_handler(sdbus_h.sd_bus *bus,
1717
except Exception as e:
1818
error = Error()
1919
try:
20-
error.reply_from_exception(m, e)
20+
error.reply_from_exception(message, e)
2121
except SdbusError as e:
2222
return -e.errno
2323
else:
@@ -44,7 +44,7 @@ cdef int property_set_handler(sdbus_h.sd_bus *bus,
4444
except Exception as e:
4545
error = Error()
4646
try:
47-
error.reply_from_exception(m, e)
47+
error.reply_from_exception(message, e)
4848
except SdbusError as e:
4949
return -e.errno
5050
else:

tests/test_server.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ def test_method2(self, r: int, gg: str) -> int:
3737

3838
@adbus.server.method()
3939
def slow_method(self) -> str:
40-
raise RuntimeError("Test")
4140
time.sleep(10)
4241
return "Done"
4342

43+
@adbus.server.method()
44+
def error_method(self) -> str:
45+
raise RuntimeError("Test")
46+
4447
@adbus.server.method()
4548
def var_method1(self, arg5: int, arg2: str, arg3, arg4, arg1: float):
4649
print(type(arg3))

0 commit comments

Comments
 (0)