From logs I see such flow of communication client-server:
client server
...
| modify_surface id:23 | |----------------------------->|
| release_surface id:24 |
|----------------------------->| |populate_messag(RES for id:23)| |<-----------------------------|
| (release_surface with id:24 processing)
| (Cleanup internal server's resources for surface)
| modify_surface id:25 | |----------------------------->| |populate_messag(RES for id:24)| |<-----------------------------|
| (modify_surface with id:25 processing)
| (Server create resp with error code)
| |
(release_surface with id:24 processing) |
(Cleanup internal client's resources for surface)
(But PendingCallCache map is not cleaned)
(PendingCallCache[25] still contains pointer to deleted structure)
| | |populate_messag(RES for id:25)| |<-----------------------------|
(PendingCallCache[25]->ParseFromString())
(Client crash!)
I added additional logs to figure out what happened and here is the output:
… spec_set_ pointer_ confinement hannel: :call_method [sending...] method_ name:modify_ surface e::save_ completion_ details [sending...] id: 23 address: 140737219953968 hannel: :call_method [sending...] method_ name:release_ surface e::save_ completion_ details [sending...] id: 24 address: 6416816 e::populate_ message_ for_result [receiving...] id: 22 address: 140737219953968 e::populate_ message_ for_result [receiving...] id: 23 address: 140737219953968 spec_set_ pointer_ confinement hannel: :call_method [sending...] method_ name:modify_ surface e::save_ completion_ details [sending...] id: 25 address: 140737219953968 e::populate_ message_ for_result [receiving...] id: 24 address: 6416816 hannel: :call_method [sending...] method_ name:disconnect e::save_ completion_ details [sending...] id: 26 address: 6417056 e::populate_ message_ for_result [receiving...] id: 25 address: 140737219953968
mir_window_
XXXXX MirProtobufRpcC
XXXXX PendingCallCach
XXXXX MirProtobufRpcC
XXXXX PendingCallCach
XXXXX PendingCallCach
XXXXX PendingCallCach
mir_window_
XXXXX MirProtobufRpcC
XXXXX PendingCallCach
XXXXX PendingCallCach
XXXXX MirProtobufRpcC
XXXXX PendingCallCach
XXXXX PendingCallCach
From logs I see such flow of communication client-server:
|--- ------- ------- ------- ----->| ------- ------- ------- ------> |
|populate_ messag( RES for id:23)|
|<-- ------- ------- ------- ------|
|--- ------- ------- ------- ----->|
|populate_ messag( RES for id:24)|
|<-- ------- ------- ------- ------| che[25] still contains pointer to deleted structure)
|populate_ messag( RES for id:25)|
|<-- ------- ------- ------- ------| ache[25] ->ParseFromStri ng())
client server
...
| modify_surface id:23 |
| release_surface id:24 |
|--
| (release_surface with id:24 processing)
| (Cleanup internal server's resources for surface)
| modify_surface id:25 |
| (modify_surface with id:25 processing)
| (Server create resp with error code)
| |
(release_surface with id:24 processing) |
(Cleanup internal client's resources for surface)
(But PendingCallCache map is not cleaned)
(PendingCallCa
| |
(PendingCallC
(Client crash!)