1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
From f2226b56c1c03ab76d90b9b081b2c1eb526e71f5 Mon Sep 17 00:00:00 2001
From: Lawrence Rust <lvr@softsystem.co.uk>
Date: Wed, 5 Jun 2013 10:52:56 +0100
Subject: [PATCH] UPnP: Reduce startup latency by moving blocking code to own
thread
Signed-off-by: Lawrence Rust <lvr@softsystem.co.uk>
---
mythtv/libs/libmythupnp/ssdp.cpp | 20 ++++++++++----------
mythtv/libs/libmythupnp/upnptasknotify.cpp | 9 ++++++++-
mythtv/libs/libmythupnp/upnptasknotify.h | 4 +++-
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/mythtv/libs/libmythupnp/ssdp.cpp b/mythtv/libs/libmythupnp/ssdp.cpp
index cf54274..07b5a07 100644
--- a/mythtv/libs/libmythupnp/ssdp.cpp
+++ src/mythtv/libs/libmythupnp/ssdp.cpp
@@ -168,21 +168,21 @@ void SSDP::EnableNotifications( int nServicePort )
// ------------------------------------------------------------------
LOG(VB_UPNP, LOG_INFO,
- "SSDP::EnableNotifications() - sending NTS_byebye");
- m_pNotifyTask->SetNTS( NTS_byebye );
- m_pNotifyTask->Execute( NULL );
-
- m_bAnnouncementsEnabled = true;
+ "SSDP::EnableNotifications() - sending NTS_byebye2");
+ m_pNotifyTask->SetNTS( NTS_byebye2 );
}
+ else
+ {
+ LOG(VB_UPNP, LOG_INFO,
+ "SSDP::EnableNotifications() - sending NTS_alive");
+ m_pNotifyTask->SetNTS( NTS_alive );
+ }
+
+ m_bAnnouncementsEnabled = true;
// ------------------------------------------------------------------
// Add Announcement Task to the Queue
// ------------------------------------------------------------------
-
- LOG(VB_UPNP, LOG_INFO, "SSDP::EnableNotifications() - sending NTS_alive");
-
- m_pNotifyTask->SetNTS( NTS_alive );
-
TaskQueue::Instance()->AddTask(m_pNotifyTask);
LOG(VB_UPNP, LOG_INFO,
diff --git a/mythtv/libs/libmythupnp/upnptasknotify.cpp b/mythtv/libs/libmythupnp/upnptasknotify.cpp
index 3f9b3bd..129a2e8 100644
--- a/mythtv/libs/libmythupnp/upnptasknotify.cpp
+++ src/mythtv/libs/libmythupnp/upnptasknotify.cpp
@@ -128,7 +128,9 @@ void UPnpNotifyTask::SendNotifyMsg( MSocketDevice *pSocket,
pSocket->writeBlock( scPacket, scPacket.length(),
pSocket->address(), pSocket->port() );
- std::this_thread::sleep_for(std::chrono::milliseconds(random() % 250));
+ // Only wait if not sending final bybbye. This speeds up shutdown
+ if (m_eNTS != NTS_byebye)
+ std::this_thread::sleep_for(std::chrono::milliseconds(random() % 250));
pSocket->writeBlock( scPacket, scPacket.length(),
pSocket->address(), pSocket->port() );
}
@@ -169,6 +171,11 @@ void UPnpNotifyTask::Execute( TaskQueue *pQueue )
if (m_eNTS == NTS_alive)
pQueue->AddTask( (m_nMaxAge / 2) * 1000, (Task *)this );
+ else if (m_eNTS == NTS_byebye2)
+ {
+ m_eNTS = NTS_alive;
+ pQueue->AddTask( this );
+ }
m_mutex.unlock();
diff --git a/mythtv/libs/libmythupnp/upnptasknotify.h b/mythtv/libs/libmythupnp/upnptasknotify.h
index 15c23fb..7a6a485 100644
--- a/mythtv/libs/libmythupnp/upnptasknotify.h
+++ src/mythtv/libs/libmythupnp/upnptasknotify.h
@@ -37,7 +37,8 @@ class UPnpDevice;
typedef enum
{
NTS_alive = 0,
- NTS_byebye = 1
+ NTS_byebye = 1,
+ NTS_byebye2
} UPnpNotifyNTS;
@@ -89,6 +90,7 @@ class UPnpNotifyTask : public Task
{
case NTS_alive : return( "ssdp:alive" );
case NTS_byebye: return( "ssdp:byebye" );
+ case NTS_byebye2: return( "ssdp:byebye" );
}
return( "unknown" );
}
|