fixed blinking deadlock again#

This commit is contained in:
louis 2016-03-05 10:20:45 +01:00
parent cdc1c10204
commit 21ef5263ef
7 changed files with 13 additions and 11 deletions

View File

@ -340,10 +340,10 @@ void cAnimation::Blink(void) {
bool blinkOn = false; bool blinkOn = false;
while (Running()) { while (Running()) {
Sleep(freq); Sleep(freq);
if (Running()) { if (Running())
blinkable->DoBlink(blinkFunc, blinkOn); blinkable->DoBlink(blinkFunc, blinkOn);
if (Running())
blinkable->Flush(); blinkable->Flush();
}
blinkOn = !blinkOn; blinkOn = !blinkOn;
} }
} }

View File

@ -42,8 +42,8 @@ public:
bool ActiveTab(void) { return activeTab; }; bool ActiveTab(void) { return activeTab; };
virtual int GetWidth(void) { return 0; }; virtual int GetWidth(void) { return 0; };
virtual void Cache(void) {}; virtual void Cache(void) {};
virtual void StopBlinkers(void) {};
virtual void Close(void) {}; virtual void Close(void) {};
virtual void StopBlinkers(void) {};
virtual void Clear(void) {}; virtual void Clear(void) {};
virtual void Hide(void) {}; virtual void Hide(void) {};
virtual void Show(void) {}; virtual void Show(void) {};

View File

@ -64,8 +64,6 @@ void cSdOsd::DestroyPixmap(cPixmap *pix) {
} }
void cSdOsd::Flush(void) { void cSdOsd::Flush(void) {
Lock();
if (osd && !flushLocked) if (osd && !flushLocked)
osd->Flush(); osd->Flush();
Unlock();
} }

View File

@ -215,11 +215,6 @@ void cView::Render(int ve, bool force) {
} }
void cView::Close(void) { void cView::Close(void) {
for (int i=0; i < numViewElements; i++) {
if (!viewElements[i])
continue;
viewElements[i]->StopBlinking();
}
delete fader; delete fader;
fader = NULL; fader = NULL;
delete shifter; delete shifter;

View File

@ -268,6 +268,7 @@ bool cViewElement::Execute(void) {
void cViewElement::Clear(void) { void cViewElement::Clear(void) {
tokenContainer->Clear(); tokenContainer->Clear();
for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) { for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) {
node->StopBlinkers();
sdOsd->Lock(); sdOsd->Lock();
node->Clear(); node->Clear();
sdOsd->Unlock(); sdOsd->Unlock();
@ -306,6 +307,7 @@ void cViewElement::Close(void) {
delete detacher; delete detacher;
detacher = NULL; detacher = NULL;
for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) { for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) {
node->StopBlinkers();
sdOsd->Lock(); sdOsd->Lock();
node->Close(); node->Close();
sdOsd->Unlock(); sdOsd->Unlock();

View File

@ -136,6 +136,7 @@ void cViewGrid::ClearGrids(void) {
for (int i = 0; i < gridsize; i++) { for (int i = 0; i < gridsize; i++) {
if (!grid[i]) if (!grid[i])
continue; continue;
grid[i]->StopBlinking();
grid[i]->Close(); grid[i]->Close();
delete grid[i]; delete grid[i];
grid[i] = NULL; grid[i] = NULL;

View File

@ -190,7 +190,10 @@ void cViewList::Clear(void) {
if (!listElements) if (!listElements)
return; return;
for (int i = 0; i < numElements; i++) { for (int i = 0; i < numElements; i++) {
listElements[i]->StopBlinking();
listElements[i]->StopScrolling(); listElements[i]->StopScrolling();
}
for (int i = 0; i < numElements; i++) {
listElements[i]->Clear(); listElements[i]->Clear();
} }
} }
@ -199,7 +202,10 @@ void cViewList::Close(void) {
if (!listElements) if (!listElements)
return; return;
for (int i = 0; i < numElements; i++) { for (int i = 0; i < numElements; i++) {
listElements[i]->StopBlinking();
listElements[i]->StopScrolling(); listElements[i]->StopScrolling();
}
for (int i = 0; i < numElements; i++) {
listElements[i]->Close(); listElements[i]->Close();
} }
} }