SDAG: Reference messages before buffering them, unreference after delivery
authorPhil Miller <mille121@illinois.edu>
Wed, 23 Jun 2010 04:07:55 +0000 (23:07 -0500)
committerPhil Miller <mille121@illinois.edu>
Wed, 23 Jun 2010 04:12:15 +0000 (23:12 -0500)
commit8f693c5af40eb40733a750b5802ab5f292b4288f
tree0c8a7aa968d5d9aa95878495a8e81c6f9ecc375a
parent7628051a3b1a5942aa7fc76730834321d4aee7b0
SDAG: Reference messages before buffering them, unreference after delivery

CharmLU uses [nokeep] entry methods to make the runtime not make
excess copies of messages that it wasn't going to modify. On
conversion to SDAG, Jonathan and I found that the CmiReference calls
in the client code weren't reached before control returned to the
runtime, because SDAG buffers messages internally when the client code
isn't ready to receive them (i.e. hasn't reached the corresponding
`when' clause).

Since SDAG hangs onto the messages given to it, make it claim a
reference to those messages, and release those references after the
message has been delivered to its client code.
src/xlat-i/sdag/CEntry.C
src/xlat-i/sdag/CSdagConstruct.C