Thanks for the clarification regarding the intended behaviour of triggerEvent() 
ie. no queueing.

Also thanks for the update to fix the race condition. As 
std::atomic_flag::test() is a C++20 feature the compiler has to be fairly new. 
As far as I can see support is added in GCC from version 11.1 with the 
-std=c++20 option. For MSVC it is added in VS 2019 v16.11 with the /std:c++20 
option.

Was it the intention that the fix should only be supported with C++20?

Best Regards

Jan Rørgaard Hansen
Lead Software Developer
Communication Solutions
Business Area Surveillance

Tel.:  + 45 3638 3000
Call me on: Skype
E-mail: jan.r.han...@dk.saabgroup.com





Saab Danmark A/S
Porten 6
DK – 6400 Sonderborg                        
www.saabgroup.com

This e-mail is private and confidential between the sender and the addressee. 
In the event of misdirection, the recipient is prohibited from using, copying 
or 
disseminating it or information in it. Please notify the above if any 
misdirection.

-----Original Message-----
From: live-devel <live-devel-boun...@us.live555.com> On Behalf Of Ross Finlayson
Sent: 16. juni 2023 16:03
To: LIVE555 Streaming Media - development & use <live-de...@us.live555.com>
Subject: Re: [Live-devel] [EXTERNAL] Re: Possible concurrency issue with 
triggerEvent()

One more thing...

> On Jun 7, 2023, at 5:52 AM, Hansen Jan Rørgård 
> <jan.r.han...@dk.saabgroup.com> wrote:
> 
> triggerEvent called twice but eventHandler is called once:
> ===============================================
> Let's say NT has called createEventTrigger with EH1 and now has:
> ET1 : EventTriggerId1
> Then we can have the sequence:
> NT                                                     LT
> |                                                        |
> triggerEvent(ET1) ----------------> (TAW=0x00000001)
> triggerEvent(ET1) ----------------> (TAW=0x00000001)
>                                                           ---------------
>                                                                             | 
> singleStep()
>                                                                             | 
> handle ET1 by calling EH1
> 
> This might be intended behaviour

Yes, actually this is intended - and is not changed by the recent update to the 
code.  Calls to “triggerEvent()” with the same event trigger id are not 
intended to be 'queued up’.  Instead, you should wait until the event is 
handled before calling “triggerEvent()” (with the same event trigger id) again.

In a future release of the code, I will update the comment in the header file 
to make this clear.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to