summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 9e3b14c..e6459f3 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -6377,6 +6377,16 @@ static void svc_session_flush(void)
*/
memset(svc.pin, 0, sizeof(svc.pin));
svc.pin_n = 0;
+ /*
+ * Host-injected pins are session-scoped too: the streaming tool
+ * follows the live client's pid, so at session end its entries are
+ * stale. Leaving them let the next client resolve through the
+ * previous client's pages (same VAs, new PAs) - the second-client
+ * exit hang. The injection queue itself is drained on this thread
+ * (svc_handle_map_add), so this clear cannot race it.
+ */
+ memset(svc.ipin, 0, sizeof(svc.ipin));
+ svc.ipin_n = 0;
memset(svc_cnt_der, 0, sizeof(svc_cnt_der));
svc_cnt_der_n = 0;
memset(svc_hot, 0, sizeof(svc_hot));