Skip to content

Commit d1cb436

Browse files
committed
Several small fixes:
- Double ready in track list - SRT input listener race condition - metadata sizing fix - SRT socket address allocation fix for listener mode
1 parent bfa4eb8 commit d1cb436

File tree

4 files changed

+29
-22
lines changed

4 files changed

+29
-22
lines changed

lib/defines.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,14 @@ static inline void show_stackframe(){}
177177
#define RAW_FRAME_COUNT 30
178178

179179
/// \TODO These values are hardcoded for now, but the dtsc_sizing_test binary can calculate them accurately.
180-
#define META_META_OFFSET 138
180+
#define META_META_OFFSET 136
181181
#define META_META_RECORDSIZE 548
182182

183183
#define META_TRACK_OFFSET 148
184184
#define META_TRACK_RECORDSIZE 1893
185185

186-
#define TRACK_TRACK_OFFSET 193
187-
#define TRACK_TRACK_RECORDSIZE 1049060
186+
#define TRACK_TRACK_OFFSET 200
187+
#define TRACK_TRACK_RECORDSIZE 1049068
188188

189189
#define TRACK_FRAGMENT_OFFSET 68
190190
#define TRACK_FRAGMENT_RECORDSIZE 14

lib/dtsc.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,6 @@ namespace DTSC{
12021202
trackList.addField("playready", RAX_STRING, 1024);
12031203

12041204
trackList.setRCount(trackCount);
1205-
trackList.setReady();
12061205
preloadTrackFields();
12071206
}else{
12081207
if (stream.isReady()){streamTracksField = stream.getFieldData("tracks");}

lib/socket_srt.cpp

+20-14
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ namespace Socket{
117117
close();
118118
initializeEmpty();
119119
if (!rhs){return *this;}
120-
memcpy(&remoteaddr, &(rhs.remoteaddr), sizeof(sockaddr_in6));
120+
memcpy(&remoteaddr, &(rhs.remoteaddr), sizeof(remoteaddr));
121121
direction = rhs.direction;
122122
remotehost = rhs.remotehost;
123123
sock = rhs.sock;
@@ -364,23 +364,29 @@ namespace Socket{
364364
return;
365365
}
366366
if (modeName == "listener"){
367-
HIGH_MSG("Going to bind a server on %s:%u", _host.c_str(), _port);
367+
std::deque<std::string> addrs = Socket::getAddrs(_host, _port);
368+
for (std::deque<std::string>::iterator it = addrs.begin(); it != addrs.end(); ++it){
369+
size_t maxSize = it->size();
370+
if (maxSize > sizeof(remoteaddr)){maxSize = sizeof(remoteaddr);}
371+
memcpy(&remoteaddr, it->data(), maxSize);
368372

369-
sockaddr_in sa = createInetAddr(_host, _port);
370-
sockaddr *psa = (sockaddr *)&sa;
373+
sockaddr *psa = (sockaddr *)&remoteaddr;
374+
HIGH_MSG("Going to bind a server on %s:%u", _host.c_str(), _port);
371375

372-
if (srt_bind(sock, psa, sizeof sa) == SRT_ERROR){
373-
close();
374-
ERROR_MSG("Can't connect SRT Socket: %s", srt_getlasterror_str());
376+
if (srt_bind(sock, psa, sizeof remoteaddr) == SRT_ERROR){
377+
close();
378+
ERROR_MSG("Can't connect SRT Socket: %s", srt_getlasterror_str());
379+
continue;
380+
}
381+
if (srt_listen(sock, 100) == SRT_ERROR){
382+
close();
383+
ERROR_MSG("Can not listen on Socket");
384+
continue;
385+
}
386+
INFO_MSG("Listener SRT socket success @ %s:%u", _host.c_str(), _port);
387+
lastGood = Util::bootMS();
375388
return;
376389
}
377-
if (srt_listen(sock, 100) == SRT_ERROR){
378-
close();
379-
ERROR_MSG("Can not listen on Socket");
380-
}
381-
INFO_MSG("Listener SRT socket success @ %s:%u", _host.c_str(), _port);
382-
lastGood = Util::bootMS();
383-
return;
384390
}
385391
ERROR_MSG("Invalid mode parameter. Use 'caller' or 'listener'");
386392
}

src/input/input_tssrt.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ static void callThreadCallbackSRT(void *socknum){
3939
Mist::InputTSSRT inp(cfgPointer, *(Socket::SRTConnection *)socknum);
4040
inp.setSingular(false);
4141
inp.run();
42+
delete (Socket::SRTConnection *)socknum;
4243
}
4344

4445
namespace Mist{
@@ -294,13 +295,14 @@ namespace Mist{
294295
cfgPointer = config;
295296
baseStreamName = streamName;
296297
while (config->is_active && sSock.connected()){
297-
Socket::SRTConnection S = sSock.accept();
298-
if (S.connected()){// check if the new connection is valid
298+
Socket::SRTConnection * S = new Socket::SRTConnection();
299+
*S = sSock.accept();
300+
if (S->connected()){// check if the new connection is valid
299301
// spawn a new thread for this connection
300-
tthread::thread T(callThreadCallbackSRT, (void *)&S);
302+
tthread::thread T(callThreadCallbackSRT, (void *)S);
301303
// detach it, no need to keep track of it anymore
302304
T.detach();
303-
HIGH_MSG("Spawned new thread for socket %i", S.getSocket());
305+
HIGH_MSG("Spawned new thread for socket %i", S->getSocket());
304306
}
305307
}
306308
Socket::SRT::libraryCleanup();

0 commit comments

Comments
 (0)