Demand creation can hang in the presence of non-demand creation messages.
When sending an array message from a given PE:
-
If the PE doesn't know the ID of the array element, only the index, it has to send a location request to the home PE for that index to both get the location of the element, and the elements ID. So it sends a request and buffers the message to send it later once it learns the location.
-
If the message is for a demand creation entry method (this info is sent along with the location request), then the home PE will trigger creation of the element if it has never before been created. If it not a demand creation entry method, and the element has never before been created, then the home PE just does nothing.
However, as part of step one, the sending PE only sends the location request if it has not sent any in the past to prevent flooding the home PE with requests. So if it sends a location request for a non-demand creation element first, the demand creation request will never get sent and the element will never be created.
Should be a straightforward-ish fix by either having a special demand creation buffer, or a separate path for handling demand creation vs regular location requests. I'm looking into it as part of a larger CkLocMgr refactoring.
May also be related to #1324 but I think those were crashes and not hangs.