diff options
author | Frank Schmirler <vdr@schmirler.de> | 2011-10-18 08:50:54 +0200 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2011-10-18 08:50:54 +0200 |
commit | 615f101b9dce6ae4a2b7b02866176a413e47169f (patch) | |
tree | c0bb6929e51b0d1c6e00274e0ffdbe0888dd88ee /server/componentIGMP.c | |
parent | 2fae067cfef6f930415e8b3d4c4713b5de91b1eb (diff) | |
download | vdr-plugin-streamdev-615f101b9dce6ae4a2b7b02866176a413e47169f.tar.gz vdr-plugin-streamdev-615f101b9dce6ae4a2b7b02866176a413e47169f.tar.bz2 |
fixed regression of "live TV must be switched in VDR main thread" change:
deadlock in IGMP streaming server when switching live TV.
Previously cComponentIGMP::Accept did all the work including the channel
switch with the new cConnectionIGMP waiting for MainThreadHook. But as the
new connection is stored *after* Accept, MainThreadHook didn't see it and
so wasn't able to switch. The streamdev main thread waited forever.
Moved the main work into cComponentIGMP::Welcome.
Diffstat (limited to 'server/componentIGMP.c')
-rw-r--r-- | server/componentIGMP.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/server/componentIGMP.c b/server/componentIGMP.c index d9f8811..9ad7d30 100644 --- a/server/componentIGMP.c +++ b/server/componentIGMP.c @@ -434,7 +434,7 @@ void cComponentIGMP::IGMPStartMulticast(cMulticastGroup* Group) if (g > MULTICAST_PRIV_MIN && g <= MULTICAST_PRIV_MAX) { cChannel *channel = Channels.GetByNumber(g - MULTICAST_PRIV_MIN); Group->connection = (cConnectionIGMP*) NewClient(); - if (!Group->connection->Start(channel, Group->group)) { + if (!Group->connection->SetChannel(channel, Group->group)) { DELETENULL(Group->connection); } } |