Open valeriyo opened 1 year ago
BTW, the workaround is:
IO::class.java.declaredFields.first { it.name == "managers" }.apply {
isAccessible = true
val managers = get(null) as ConcurrentHashMap<*, *>
managers.clear()
}
and then in proguard-rules.pro
:
-keepclassmembers class io.socket.client.IO {
private static final ** managers;
}
Describe the bug The
IO::managers
map is added to, but never removed from, and there is no method to clear it - so a bunch of stuff leaks.To Reproduce
Use LeakCanary to watch
OkHttpClient
instances passed intoIO::Options.callFactory
/webSocketFactory
- afterIO.socket.close()
- thoseOkHttpClient
will leak, being held byIO::managers
- which is added to, but is never cleared.Socket.IO java client version:
2.1.0
Expected behavior Either automatically remove entries from
IO::managers
when sockets are closed, or provide a method to clearIO::managers
map - and release the resources held by it.Platform: