diff options
Diffstat (limited to 'erts/emulator/beam/erl_message.h')
| -rw-r--r-- | erts/emulator/beam/erl_message.h | 32 | 
1 files changed, 11 insertions, 21 deletions
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h index 42ed14e69c..a14f4f51d8 100644 --- a/erts/emulator/beam/erl_message.h +++ b/erts/emulator/beam/erl_message.h @@ -167,14 +167,12 @@ typedef struct {      Sint len;            /* queue length */      /* -     * The following two fields are used by the recv_mark/1 and +     * The following field is used by the recv_mark/1 and       * recv_set/1 instructions.       */ -    BeamInstr* mark;		/* address to rec_loop/2 instruction */      ErtsMessage** saved_last;	/* saved last pointer */  } ErlMessageQueue; -#ifdef ERTS_SMP  typedef struct {      ErtsMessage* first; @@ -190,7 +188,6 @@ typedef struct erl_trace_message_queue__ {      Sint len;            /* queue length */  } ErlTraceMessageQueue; -#endif  /* Get "current" message */  #define PEEK_MESSAGE(p)  (*(p)->msg.save) @@ -207,7 +204,6 @@ typedef struct erl_trace_message_queue__ {          (p)->where.len += (num_msgs);                                   \      } while(0) -#ifdef ERTS_SMP  /* Add message last in private message queue */  #define LINK_MESSAGE_PRIVQ(p, first_msg, last_msg, len)                 \ @@ -219,7 +215,7 @@ typedef struct erl_trace_message_queue__ {  #define LINK_MESSAGE(p, first_msg, last_msg, len)       \      LINK_MESSAGE_IMPL(p, first_msg, last_msg, len, msg_inq) -#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(p)                   \ +#define ERTS_MSGQ_MV_INQ2PRIVQ(p)                   \      do {                                                \          if (p->msg_inq.first) {                         \              *p->msg.last = p->msg_inq.first;            \ @@ -231,17 +227,6 @@ typedef struct erl_trace_message_queue__ {          }                                               \      } while (0) -#else - -#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(p) - -/* Add message last_msg in message queue */ -#define LINK_MESSAGE(p, first_msg, last_msg, len)                       \ -    do {                                                                \ -        LINK_MESSAGE_IMPL(p, first_msg, last_msg, len, msg);            \ -    } while(0) - -#endif  /* Unlink current message */  #define UNLINK_MESSAGE(p,msgp) do { \ @@ -250,12 +235,17 @@ typedef struct erl_trace_message_queue__ {       (p)->msg.len--; \       if (__mp == NULL) \           (p)->msg.last = (p)->msg.save; \ -     (p)->msg.mark = 0; \  } while(0) -/* Reset message save point (after receive match) */ -#define JOIN_MESSAGE(p) \ -     (p)->msg.save = &(p)->msg.first +/* + * Reset message save point (after receive match). + * Also invalidate the saved position since it may no + * longer be safe to use. + */ +#define JOIN_MESSAGE(p) do {                    \ +    (p)->msg.save = &(p)->msg.first;            \ +    (p)->msg.saved_last = 0;                    \ +} while(0)  /* Save current message */  #define SAVE_MESSAGE(p) \  | 
