+ // FIXME: better algorithm, maybe some kind of balanced tree? or a heap?
+
+ // FIXME: not the best way to request multiple locks...
+ SIMIX_mutex_lock(request_queue_mutex);
+ SIMIX_mutex_lock(message_queue_mutex);
+search: for (request_item = xbt_fifo_get_first_item(request_queue);
+ NULL != request_item;
+ request_item = xbt_fifo_get_next_item(request_item)) {
+ request = xbt_fifo_get_item_content(request_item);
+ for (message_item = xbt_fifo_get_first_item(message_queue);
+ NULL != message_item;
+ message_item = xbt_fifo_get_next_item(message_item)) {
+ message = xbt_fifo_get_item_content(message_item);
+ if (request->comm == message->comm &&
+ (MPI_ANY_SOURCE == request->src || request->src == message->src) &&
+ request->tag == message->tag) {
+ xbt_fifo_remove_item(request_queue, request_item);
+ xbt_fifo_remove_item(message_queue, message_item);
+ break search;
+ }
+ }
+ }
+ SIMIX_mutex_unlock(message_queue_mutex);
+ SIMIX_mutex_unlock(request_queue_mutex);