RX0321

Domain: Execution

Error message

message[] to %s: the letter could not be written in the asker's own heap (%s)

In the message, %s marks a value that the engine fills in when it raises the error.

The story

You sent a message, but the letter never got written. Here is the rule behind that. In rush, nobody writes into somebody else's memory. When thread A wants to message thread B, A first writes the letter in its own heap, and then asks the delivery service, the fedex, to carry it. So the letter has to exist in the sender's own space before anything travels. This error says that step failed. The sender's heap refused to create the letter, maybe because its memory is full, or because the sending thread is no longer alive. With no letter, there is nothing for the fedex to carry. Rush could pretend the message was sent, and that would be the worst outcome, since you would wait for a reply that never comes. So it refuses, and shows you the address and the heap's own explanation, word for word. Imagine a script that fills up its memory in a loop and then tries to send a status update. The fix is to free the memory first, or to send smaller things, and then message again. Honest failure beats a false sent.

Text from the Rush engine's error catalogue.