fix(ibus): drop a context on the Service.Destroy libibus really sends
libibus destroys an input context with Destroy on org.freedesktop.IBus.Service, not on the InputContext interface, so the call went unanswered and the context slot stayed taken until the whole connection closed. A long-lived GTK process that opens and closes text widgets exhausted the 1024 slots and then got LimitsExceeded for every new field. The live contract test now destroys a context that way and checks the path is gone.
This commit is contained in:
4
ibus.c
4
ibus.c
@@ -854,6 +854,10 @@ onmsg(DBusConnection *c, DBusMessage *m, void*)
|
||||
if(strcmp(member, "GetAll") == 0)
|
||||
return handlepropertygetall(c, m);
|
||||
}
|
||||
/* libibus destroys a context through its Service base interface. */
|
||||
if(strcmp(iface, "org.freedesktop.IBus.Service") == 0 &&
|
||||
strcmp(member, "Destroy") == 0)
|
||||
iface = "org.freedesktop.IBus.InputContext";
|
||||
if(strcmp(iface, "org.freedesktop.IBus.InputContext") == 0){
|
||||
ctx = findcontext(c, path);
|
||||
if(ctx == nil)
|
||||
|
||||
Reference in New Issue
Block a user