Fixed several small buffer bugs.

This commit is contained in:
Thulinma 2013-03-05 17:23:11 +01:00
parent 473d5d1a7f
commit d1e26d6848
2 changed files with 9 additions and 15 deletions

View file

@ -65,6 +65,12 @@ namespace Buffer {
while (usr->S.connected()){ while (usr->S.connected()){
usleep(5000); //sleep 5ms usleep(5000); //sleep 5ms
if ( !usr->myRing->playCount || !usr->Send()){ if ( !usr->myRing->playCount || !usr->Send()){
if (usr->myRing->updated){
Stream::get()->getReadLock();
usr->S.SendNow(Stream::get()->getStream()->metadata.toNetPacked());
Stream::get()->dropReadLock();
usr->myRing->updated = false;
}
if (usr->S.spool()){ if (usr->S.spool()){
while (usr->S.Received().size()){ while (usr->S.Received().size()){
//delete anything that doesn't end with a newline //delete anything that doesn't end with a newline

View file

@ -67,6 +67,7 @@ bool Buffer::user::Send(){
if (myRing->waiting){ if (myRing->waiting){
Stream::get()->waitForData(); Stream::get()->waitForData();
if ( !myRing->waiting){ if ( !myRing->waiting){
Stream::get()->getReadLock();
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){ if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
myRing->playCount--; myRing->playCount--;
if ( !myRing->playCount){ if ( !myRing->playCount){
@ -78,13 +79,7 @@ bool Buffer::user::Send(){
S.SendNow(pausemark.toNetPacked()); S.SendNow(pausemark.toNetPacked());
} }
} }
if (myRing->updated){
fprintf(stderr, "Sent new metadata\n");
Stream::get()->getReadLock();
S.SendNow(Stream::get()->getStream()->metadata.toNetPacked());
Stream::get()->dropReadLock(); Stream::get()->dropReadLock();
myRing->updated = false;
}
} }
return false; return false;
} //still waiting for next buffer? } //still waiting for next buffer?
@ -105,14 +100,6 @@ bool Buffer::user::Send(){
return false; return false;
} //no next buffer? go in waiting mode. } //no next buffer? go in waiting mode.
myRing->b--; myRing->b--;
if (myRing->updated){
fprintf(stderr, "Sent new metadata\n");
Stream::get()->getReadLock();
S.SendNow(Stream::get()->getStream()->metadata.toNetPacked());
Stream::get()->dropReadLock();
myRing->updated = false;
}
Stream::get()->dropReadLock();
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){ if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
myRing->playCount--; myRing->playCount--;
if ( !myRing->playCount){ if ( !myRing->playCount){
@ -124,6 +111,7 @@ bool Buffer::user::Send(){
S.SendNow(pausemark.toNetPacked()); S.SendNow(pausemark.toNetPacked());
} }
} }
Stream::get()->dropReadLock();
return false; return false;
} //completed a send } //completed a send
Stream::get()->dropReadLock(); Stream::get()->dropReadLock();