void CAudioManager::subscribe(IAudioEventObserver *observer)
{
+ lock_guard<mutex> lock(mMutex);
if (observer) {
mObservers.push_back(observer);
}
void CAudioManager::unsubscribe(IAudioEventObserver *observer)
{
+ lock_guard<mutex> lock(mMutex);
auto iter = find(mObservers.begin(), mObservers.end(), observer);
if (iter != mObservers.end()) {
mObservers.erase(iter);
lock.lock();
end = mAudioData.end();
auto begin = mAudioData.begin();
+ vector<IAudioEventObserver*> observers = mObservers;
lock.unlock();
if (iter == end) {
lead = begin;
if (g_speech_pcm_wait_count < cnt) {
unsigned char final_buffer[2] = {'\0', };
MWR_LOGE("[ERROR] Wrong request, there's no pcm data");
- for (const auto& observer : mObservers) {
+ for (const auto& observer : observers) {
if (observer) {
if (!observer->on_streaming_audio_data(
MAS_SPEECH_STREAMING_EVENT_FAIL, NULL, 0)) {
lock.lock();
end = mAudioData.end();
+ vector<IAudioEventObserver*> observers = mObservers;
if (lead != end) {
iter = lead;
mas_speech_data& speech_data = iter->data;
- for (const auto& observer : mObservers) {
+ for (const auto& observer : observers) {
if (observer) {
if (!observer->on_streaming_audio_data(
speech_data.event, speech_data.buffer, speech_data.len)) {
if (true != finish_event_sent) {
unsigned char final_buffer[2] = {'\0', };
- for (const auto& observer : mObservers) {
+ lock.lock();
+ vector<IAudioEventObserver*> observers = mObservers;
+ lock.unlock();
+ for (const auto& observer : observers) {
if (observer) {
MWR_LOGI("No FINISH event sent yet, adding to finalize streaming session");
if (!observer->on_streaming_audio_data(
void CAudioManager::notify_audio_data_recording(long time, void* data, int len)
{
- for (const auto& observer : mObservers) {
+ unique_lock<mutex> lock(mMutex, defer_lock);
+ lock.lock();
+ vector<IAudioEventObserver*> observers = mObservers;
+ lock.unlock();
+ for (const auto& observer : observers) {
if (observer) {
if (!observer->on_recording_audio_data(time, data, len)) {
LOGE("[Recorder WARNING] One of the observer returned false");