projects
/
project
/
ubus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libubus: fix deferring invoke processing for non-uloop usage
[project/ubus.git]
/
lua
/
ubus.c
diff --git
a/lua/ubus.c
b/lua/ubus.c
index
6da935d
..
92fb0a1
100644
(file)
--- a/
lua/ubus.c
+++ b/
lua/ubus.c
@@
-285,10
+285,13
@@
ubus_method_handler(struct ubus_context *ctx, struct ubus_object *obj,
struct blob_attr *msg)
{
struct ubus_lua_object *o = container_of(obj, struct ubus_lua_object, o);
struct blob_attr *msg)
{
struct ubus_lua_object *o = container_of(obj, struct ubus_lua_object, o);
+ int rv = 0;
lua_getglobal(state, "__ubus_cb");
lua_rawgeti(state, -1, o->r);
lua_getfield(state, -1, method);
lua_getglobal(state, "__ubus_cb");
lua_rawgeti(state, -1, o->r);
lua_getfield(state, -1, method);
+ lua_remove(state, -2);
+ lua_remove(state, -2);
if (lua_isfunction(state, -1)) {
lua_pushlightuserdata(state, req);
if (lua_isfunction(state, -1)) {
lua_pushlightuserdata(state, req);
@@
-296,9
+299,13
@@
ubus_method_handler(struct ubus_context *ctx, struct ubus_object *obj,
lua_pushnil(state);
else
ubus_lua_parse_blob_array(state, blob_data(msg), blob_len(msg), true);
lua_pushnil(state);
else
ubus_lua_parse_blob_array(state, blob_data(msg), blob_len(msg), true);
- lua_call(state, 2, 0);
- }
- return 0;
+ lua_call(state, 2, 1);
+ if (lua_isnumber(state, -1))
+ rv = lua_tonumber(state, -1);
+ } else
+ lua_pop(state, 1);
+
+ return rv;
}
static int lua_gettablelen(lua_State *L, int index)
}
static int lua_gettablelen(lua_State *L, int index)