aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/message.c8
-rw-r--r--mps/code/mpm.h1
-rw-r--r--mps/code/mpmst.h1
-rw-r--r--mps/code/mps.h2
-rw-r--r--mps/code/mpsi.c17
-rw-r--r--mps/code/mpslib.h3
6 files changed, 30 insertions, 2 deletions
diff --git a/mps/code/message.c b/mps/code/message.c
index 284e78c6314..ae7ba930616 100644
--- a/mps/code/message.c
+++ b/mps/code/message.c
@@ -284,6 +284,14 @@ MessageClass MessageGetClass(Message message)
284 return message->class; 284 return message->class;
285} 285}
286 286
287/* Return the class of a message */
288mps_clock_t MessageGetClock(Message message)
289{
290 AVERT(Message, message);
291
292 return message->postedClock;
293}
294
287static void MessageDelete(Message message) 295static void MessageDelete(Message message)
288{ 296{
289 AVERT(Message, message); 297 AVERT(Message, message);
diff --git a/mps/code/mpm.h b/mps/code/mpm.h
index b9d8e7548c1..1dfa7dc2c6a 100644
--- a/mps/code/mpm.h
+++ b/mps/code/mpm.h
@@ -311,6 +311,7 @@ extern void MessageDiscard(Arena arena, Message message);
311/* -- Message Methods, Generic */ 311/* -- Message Methods, Generic */
312extern MessageType MessageGetType(Message message); 312extern MessageType MessageGetType(Message message);
313extern MessageClass MessageGetClass(Message message); 313extern MessageClass MessageGetClass(Message message);
314extern mps_clock_t MessageGetClock(Message message);
314/* -- Message Method Dispatchers, Type-specific */ 315/* -- Message Method Dispatchers, Type-specific */
315extern void MessageFinalizationRef(Ref *refReturn, 316extern void MessageFinalizationRef(Ref *refReturn,
316 Arena arena, Message message); 317 Arena arena, Message message);
diff --git a/mps/code/mpmst.h b/mps/code/mpmst.h
index 739c95a449d..1905e2bb560 100644
--- a/mps/code/mpmst.h
+++ b/mps/code/mpmst.h
@@ -223,6 +223,7 @@ typedef struct MessageStruct {
223 MessageType type; /* Message Type */ 223 MessageType type; /* Message Type */
224 MessageClass class; /* Message Class Structure */ 224 MessageClass class; /* Message Class Structure */
225 RingStruct queueRing; /* Message queue ring */ 225 RingStruct queueRing; /* Message queue ring */
226 mps_clock_t postedClock; /* mps_clock() at post time */
226} MessageStruct; 227} MessageStruct;
227 228
228 229
diff --git a/mps/code/mps.h b/mps/code/mps.h
index e47b88077c2..2852416bac8 100644
--- a/mps/code/mps.h
+++ b/mps/code/mps.h
@@ -48,6 +48,7 @@ typedef size_t mps_align_t; /* alignment (size_t) */
48typedef unsigned mps_rm_t; /* root mode (unsigned) */ 48typedef unsigned mps_rm_t; /* root mode (unsigned) */
49typedef unsigned mps_rank_t; /* ranks (unsigned) */ 49typedef unsigned mps_rank_t; /* ranks (unsigned) */
50typedef unsigned mps_message_type_t; /* message type (unsigned) */ 50typedef unsigned mps_message_type_t; /* message type (unsigned) */
51typedef unsigned long mps_clock_t; /* processor time */
51 52
52/* Result Codes */ 53/* Result Codes */
53/* .result-codes: Keep in sync with <code/mpmtypes.h#result-codes> */ 54/* .result-codes: Keep in sync with <code/mpmtypes.h#result-codes> */
@@ -527,6 +528,7 @@ extern void mps_message_discard(mps_arena_t, mps_message_t);
527 528
528/* -- All Message Types */ 529/* -- All Message Types */
529extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t); 530extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t);
531extern mps_clock_t mps_message_clock(mps_arena_t, mps_message_t);
530 532
531/* -- mps_message_type_finalization */ 533/* -- mps_message_type_finalization */
532extern void mps_message_finalization_ref(mps_addr_t *, 534extern void mps_message_finalization_ref(mps_addr_t *,
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c
index 2dbc5cfe663..e5f88fc8541 100644
--- a/mps/code/mpsi.c
+++ b/mps/code/mpsi.c
@@ -1675,6 +1675,23 @@ mps_message_type_t mps_message_type(mps_arena_t mps_arena,
1675 return (mps_message_type_t)type; 1675 return (mps_message_type_t)type;
1676} 1676}
1677 1677
1678mps_clock_t mps_message_clock(mps_arena_t mps_arena,
1679 mps_message_t mps_message)
1680{
1681 Arena arena = (Arena)mps_arena;
1682 Message message = (Message)mps_message;
1683 mps_clock_t postedClock; /* @@@@ should be Clock, not mps_clock_t */
1684
1685 ArenaEnter(arena);
1686
1687 postedClock = MessageGetClock(message);
1688
1689 ArenaLeave(arena);
1690
1691 return (mps_clock_t)postedClock;
1692}
1693
1694
1678/* -- mps_message_type_finalization */ 1695/* -- mps_message_type_finalization */
1679 1696
1680void mps_message_finalization_ref(mps_addr_t *mps_addr_return, 1697void mps_message_finalization_ref(mps_addr_t *mps_addr_return,
diff --git a/mps/code/mpslib.h b/mps/code/mpslib.h
index 094975b3cf7..f74bd986fa6 100644
--- a/mps/code/mpslib.h
+++ b/mps/code/mpslib.h
@@ -14,7 +14,7 @@
14#define mpslib_h 14#define mpslib_h
15 15
16#include <stddef.h> 16#include <stddef.h>
17 17#include "mps.h" /* mps_clock_t */
18 18
19extern int mps_lib_get_EOF(void); 19extern int mps_lib_get_EOF(void);
20#define mps_lib_EOF (mps_lib_get_EOF()) 20#define mps_lib_EOF (mps_lib_get_EOF())
@@ -36,7 +36,6 @@ extern void *(mps_lib_memcpy)(void *, const void *, size_t);
36extern int (mps_lib_memcmp)(const void *, const void *, size_t); 36extern int (mps_lib_memcmp)(const void *, const void *, size_t);
37 37
38 38
39typedef unsigned long mps_clock_t;
40extern mps_clock_t mps_clock(void); 39extern mps_clock_t mps_clock(void);
41extern mps_clock_t mps_clocks_per_sec(void); 40extern mps_clock_t mps_clocks_per_sec(void);
42 41