Fix locking in waitForEvent() and sample playing

This commit is contained in:
Michal Moskal 2017-10-30 19:18:01 +00:00
parent e8e31e6aa7
commit a082807455
3 changed files with 6 additions and 0 deletions

View File

@ -269,11 +269,13 @@ void waitForEvent(int source, int value) {
pthread_mutex_lock(&eventMutex);
t->waitSource = source;
t->waitValue = value;
stopUser();
// spourious wake ups may occur they say
while (t->waitSource) {
pthread_cond_wait(&t->waitCond, &eventMutex);
}
pthread_mutex_unlock(&eventMutex);
startUser();
return;
}
}

View File

@ -7,6 +7,8 @@ namespace pxt {
void raiseEvent(int id, int event);
int allocateNotifyEvent();
void sleep_core_us(uint64_t us);
void startUser();
void stopUser();
class Button;
typedef Button *Button_;

View File

@ -119,6 +119,7 @@ void playSample(Buffer buf) {
pthread_detach(pid);
}
stopUser();
pthread_mutex_lock(&pumpMutex);
*lmsSoundMMap = 1; // BUSY
uint8_t cmd[] = {SOUND_CMD_PLAY, (uint8_t)((currVolume / 33) + 1)};
@ -130,6 +131,7 @@ void playSample(Buffer buf) {
pumpMusic();
pthread_cond_wait(&sampleDone, &pumpMutex);
pthread_mutex_unlock(&pumpMutex);
startUser();
}
/**