On 05/19/16 10:39, Gary Lin wrote:
> Cc Samer and Nagaraj.
> I saw them with "git sent-email --dry-run". Wonder how they were dropped.

They were not dropped. The list software is trying to be smart.

Namely, if you go to <https://lists.01.org/mailman/listinfo/edk2-devel>,
and click "Unsubscribe or edit options", you can toggle a number of
mailing list options for your subscriptions. One of these options is:

  Avoid duplicate copies of messages?

This affects how the list software reflects an email to you that you
were also directly addressed on.

Some people (including me) like to receive duplicate copies. Meaning, if
you CC me on a patch that you send to the list, I will get a direct copy
from you (due to the CC), plus the list software will send me another
copy (*because* I have enabled duplicate copies). I like to see one
instance of your patch in my INBOX, and another one in my edk2-devel
folder (which is supposed to be a complete archive).

However, others don't like to receive duplicates. They prefer the list
software not to send them a reflected message, if they are also on the
CC list directly. When the list software is deciding about reflecting a
message to subscriber X, and subscriber X has disabled duplicates, and
subscriber X is also on the CC list of the message that the list
software received from the submitter, then the list software assumes
subscriber X has the message anyway (directly from the submitter), and
will not reflect the message to subscriber X.

*But*, to actually answer your question, in this latter case something
else happens to. Namely, subscriber X is *also* removed from the CC list
of the message that the list software sends out to any other
subscribers. I guess the idea is, "subscriber X likes to receive exactly
one copy of each message on the list; so he got one copy of the thread
starter directly from the submitter, and he will get one copy of each
followup message too, sent by others, reflected by the list software".
If the CC were preserved in the reflected thread starter, then followup
messages would arrive to subscriber X both directly and reflected by the
list.

For the submitter, this CC munging is incredibly confusing and annoying.
But, if you know about the above, it is more tolerable.

As a side effect, you can now deduce that Samer and Nagaraj have *not*
enabled duplicate copies in their options. :)

HTH
Laszlo


> On Thu, May 19, 2016 at 11:49:17AM +0800, Gary Lin wrote:
>> The HTTP Token Wrap is created in EfiHttpResponse() and then passed
>> to the deferred Receive event callback, HttpTcpReceiveNotifyDpc.
>> HttpTcpReceiveHeader and HttpTcpReceiveBody use a Tcp polling loop to
>> monitor the socket status and trigger the Receive event when a new
>> packet arrives. The Receive event brings up HttpTcpReceiveNotifyDpc
>> to process the HTTP message and the function will set Wrap->TcpWrap.IsRxDone
>> to TRUE to break the Tcp polling loop.
>>
>> However, HttpTcpReceiveNotifyDpc mistakenly freed Wrap, so the Tcp
>> polling loop was actually checking a dead variable, and this led the
>> system into an unstable status.
>>
>> Given the fact that the HTTP Token Wrap will be freed in EfiHttpResponse
>> or HttpResponseWorker, this commit removes every "FreePool (Wrap)" in
>> HttpTcpReceiveNotifyDpc.
>>
>> Cc: "Wu, Jiaxin" <jiaxin...@intel.com>
>> Cc: "Siyuan Fu" <siyuan...@intel.com>
>> Cc: "El-Haj-Mahmoud, Samer" <samer.el-haj-mahm...@hpe.com>
>> Cc: "Laszlo Ersek" <ler...@redhat.com>
>> Cc: "Hegde, Nagaraj P" <nagaraj-p.he...@hpe.com>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Gary Lin <g...@suse.com>
>> ---
>>  NetworkPkg/HttpDxe/HttpProto.c | 4 ----
>>  1 file changed, 4 deletions(-)
>>
>> diff --git a/NetworkPkg/HttpDxe/HttpProto.c b/NetworkPkg/HttpDxe/HttpProto.c
>> index f3992ed..afa7fe4 100644
>> --- a/NetworkPkg/HttpDxe/HttpProto.c
>> +++ b/NetworkPkg/HttpDxe/HttpProto.c
>> @@ -152,7 +152,6 @@ HttpTcpReceiveNotifyDpc (
>>      if (EFI_ERROR (Wrap->TcpWrap.Rx6Token.CompletionToken.Status)) {
>>        Wrap->HttpToken->Status = 
>> Wrap->TcpWrap.Rx6Token.CompletionToken.Status;
>>        gBS->SignalEvent (Wrap->HttpToken->Event);
>> -      FreePool (Wrap);
>>        return ;
>>      }
>>  
>> @@ -162,7 +161,6 @@ HttpTcpReceiveNotifyDpc (
>>      if (EFI_ERROR (Wrap->TcpWrap.Rx4Token.CompletionToken.Status)) {
>>        Wrap->HttpToken->Status = 
>> Wrap->TcpWrap.Rx4Token.CompletionToken.Status;
>>        gBS->SignalEvent (Wrap->HttpToken->Event);
>> -      FreePool (Wrap);
>>        return ;
>>      }
>>    }
>> @@ -234,8 +232,6 @@ HttpTcpReceiveNotifyDpc (
>>    // Check pending RxTokens and receive the HTTP message.
>>    //
>>    NetMapIterate (&Wrap->HttpInstance->RxTokens, HttpTcpReceive, NULL);
>> -  
>> -  FreePool (Wrap);
>>  }
>>  
>>  /**
>> -- 
>> 2.8.2
>>
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel
>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to