GetQueuedCompletionStatus LEAK



  • Hi,

    nachdem ich mir ein paar Microsoft Samples, wie z.B.: http://msdn.microsoft.com/en-us/library/windows/desktop/ms706972(v=vs.85).aspx , angesehen habe scheint die normale Vorgehensweise um an Nachrichten, die in der Queue "stored" sind, zu kommen zu sein eine Overlapped-Struktur mit bekanntem Abstand zum Start der Nachricht zu speichern.

    z.B.:

    typedef struct
    {
      int mymsg;
      OVERLAPPED ovlp;
    }
    

    Wenn nun eine Nachricht "dequeued" wird, bekommt man über den Parameter von GetQueuedCompletionStatus die Adresse von ovlp und somit die Adresse der Nachricht. So weit so gut.

    Meine Frage:

    Was passiert im Fehlerfall, wenn der Parameter für die Adresse der Overlapped-Struktur in GetQueuedCompletionPort NULL ist.

    In dem oben geposteten Beispiel steht:

    if (pov == NULL)
    {

    // An unrecoverable error occurred in the completion port. Wait for the next notification.
    continue;
    }

    Was allerdings zu einem Leak führen würde, wenn man jede Loop neue Nachrichten allokieren würde.

    Gibt es also eine Möglichkeit an die Message zu kommen, auch wenn ein Fehler aufgetreten ist. Damit man zumindest die Message-Puffer leeren kann?



  • Was ich noch nicht beachtet habe.

    Bleibt der Puffer der mit dieser "Notification"in Verbindung steht evtl. noch erreichbar. D.h. die nächste Nachricht kann ihn einfach Verwenden?


Anmelden zum Antworten