File 1340-erts-Avoid-unnecessary-yielding-when-cleaning-up-sig.patch of Package erlang
From e3f51d734da042e770028b2064f48d2e319641d7 Mon Sep 17 00:00:00 2001
From: Rickard Green <rickard@erlang.org>
Date: Wed, 6 Sep 2023 15:05:50 +0200
Subject: [PATCH] [erts] Avoid unnecessary yielding when cleaning up signals
---
erts/emulator/beam/erl_proc_sig_queue.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/erts/emulator/beam/erl_proc_sig_queue.c b/erts/emulator/beam/erl_proc_sig_queue.c
index 83b6991809..2384a637d8 100644
--- a/erts/emulator/beam/erl_proc_sig_queue.c
+++ b/erts/emulator/beam/erl_proc_sig_queue.c
@@ -5827,6 +5827,7 @@ stretch_limit(Process *c_p, ErtsSigRecvTracing *tp,
erts_proc_sig_handle_exit(Process *c_p, Sint *redsp,
ErtsProcExitContext *pe_ctxt_p)
{
+ int yield = 0;
int cnt;
Sint limit;
ErtsMessage *sig, ***next_nm_sig;
@@ -5969,12 +5970,11 @@ erts_proc_sig_handle_exit(Process *c_p, Sint *redsp,
handle_sync_suspend(c_p, sig);
break;
- case ERTS_SIG_Q_OP_RPC: {
- int yield = 0;
- handle_rpc(c_p, (ErtsProcSigRPC *) sig,
- cnt, limit, &yield);
+ case ERTS_SIG_Q_OP_RPC:
+ yield = 0;
+ cnt += handle_rpc(c_p, (ErtsProcSigRPC *) sig,
+ cnt, limit, &yield);
break;
- }
case ERTS_SIG_Q_OP_DIST_SPAWN_REPLY: {
cnt += handle_dist_spawn_reply_exiting(c_p, sig, pe_ctxt_p);
@@ -6013,7 +6013,7 @@ erts_proc_sig_handle_exit(Process *c_p, Sint *redsp,
break;
}
- } while (cnt >= limit && *next_nm_sig);
+ } while (cnt <= limit && !yield && *next_nm_sig);
*redsp += cnt / ERTS_SIG_REDS_CNT_FACTOR;
--
2.35.3