Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang
erlang
0581-erts-Fix-alias-signal-type-check-macros.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0581-erts-Fix-alias-signal-type-check-macros.patch of Package erlang
From 7a0bed847851739f9fe7111f58e59cb4d16dbc67 Mon Sep 17 00:00:00 2001 From: Rickard Green <rickard@erlang.org> Date: Sat, 2 Dec 2023 15:46:31 +0100 Subject: [PATCH] [erts] Fix alias signal type check macros These macros should ignore the extra bits in the signal tag. This since as of the changes introduced in this branch, those are not always zero anymore (non-zero means that a trace token is attached to the signal). This bug has never been released, so it needs no ticket of its own. --- erts/emulator/beam/erl_proc_sig_queue.h | 45 ++++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/erts/emulator/beam/erl_proc_sig_queue.h b/erts/emulator/beam/erl_proc_sig_queue.h index 6a8c0750b1..9b5a74e4dc 100644 --- a/erts/emulator/beam/erl_proc_sig_queue.h +++ b/erts/emulator/beam/erl_proc_sig_queue.h @@ -216,30 +216,42 @@ typedef struct { ERTS_SIG_Q_TYPE_MAX #define ERTS_SIG_IS_DIST_ALIAS_MSG_TAG(Tag) \ - ((Tag) == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ - ERTS_SIG_Q_TYPE_DIST, \ - 0)) + (((Tag) & (ERTS_PROC_SIG_TYPE_MASK \ + | ERTS_PROC_SIG_OP_MASK \ + | ERTS_PROC_SIG_BASE_TAG_MASK)) \ + == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ + ERTS_SIG_Q_TYPE_DIST, \ + 0)) #define ERTS_SIG_IS_DIST_ALIAS_MSG(sig) \ ERTS_SIG_IS_DIST_ALIAS_MSG_TAG(((ErtsSignal *) (sig))->common.tag) #define ERTS_SIG_IS_OFF_HEAP_ALIAS_MSG_TAG(Tag) \ - ((Tag) == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ - ERTS_SIG_Q_TYPE_OFF_HEAP, \ - 0)) + (((Tag) & (ERTS_PROC_SIG_TYPE_MASK \ + | ERTS_PROC_SIG_OP_MASK \ + | ERTS_PROC_SIG_BASE_TAG_MASK)) \ + == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ + ERTS_SIG_Q_TYPE_OFF_HEAP, \ + 0)) #define ERTS_SIG_IS_OFF_HEAP_ALIAS_MSG(sig) \ ERTS_SIG_IS_OFF_HEAP_ALIAS_MSG_TAG(((ErtsSignal *) (sig))->common.tag) #define ERTS_SIG_IS_HEAP_ALIAS_MSG_TAG(Tag) \ - ((Tag) == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ - ERTS_SIG_Q_TYPE_HEAP, \ - 0)) + (((Tag) & (ERTS_PROC_SIG_TYPE_MASK \ + | ERTS_PROC_SIG_OP_MASK \ + | ERTS_PROC_SIG_BASE_TAG_MASK)) \ + == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ + ERTS_SIG_Q_TYPE_HEAP, \ + 0)) #define ERTS_SIG_IS_HEAP_ALIAS_MSG(sig) \ ERTS_SIG_IS_HEAP_ALIAS_MSG_TAG(((ErtsSignal *) (sig))->common.tag) #define ERTS_SIG_IS_HEAP_FRAG_ALIAS_MSG_TAG(Tag) \ - ((Tag) == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ - ERTS_SIG_Q_TYPE_HEAP_FRAG, \ - 0)) + (((Tag) & (ERTS_PROC_SIG_TYPE_MASK \ + | ERTS_PROC_SIG_OP_MASK \ + | ERTS_PROC_SIG_BASE_TAG_MASK)) \ + == ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_ALIAS_MSG, \ + ERTS_SIG_Q_TYPE_HEAP_FRAG, \ + 0)) #define ERTS_SIG_IS_HEAP_FRAG_ALIAS_MSG(sig) \ ERTS_SIG_IS_HEAP_FRAG_ALIAS_MSG_TAG(((ErtsSignal *) (sig))->common.tag) @@ -362,6 +374,15 @@ int erts_proc_sig_queue_force_buffers(Process*); #define ERTS_PROC_SIG_MSGQ_LEN_OFFS_MARK \ ERTS_PROC_SIG_MAKE_TAG(ERTS_SIG_Q_OP_MSGQ_LEN_OFFS_MARK,0,0) +#define ERTS_PROC_SIG_BASE_TAG_MASK \ + ((1 << _HEADER_ARITY_OFFS)-1) +#define ERTS_PROC_SIG_OP_MASK \ + (ERTS_SIG_Q_OP_MASK << (ERTS_SIG_Q_OP_SHIFT + _HEADER_ARITY_OFFS)) +#define ERTS_PROC_SIG_TYPE_MASK \ + (ERTS_SIG_Q_TYPE_MASK << (ERTS_SIG_Q_TYPE_SHIFT + _HEADER_ARITY_OFFS)) +#define ERTS_PROC_SIG_XTRA_MASK \ + (ERTS_SIG_Q_XTRA_MASK << (ERTS_SIG_Q_XTRA_SHIFT + _HEADER_ARITY_OFFS)) + struct dist_entry_; #define ERTS_PROC_HAS_INCOMING_SIGNALS(P) \ -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor