tech_pvt = switch_core_session_get_private(session);
assert(tech_pvt != NULL);
+ switch_thread_rwlock_wrlock(tech_pvt->rtmp_session->rwlock);
switch_clear_flag_locked(tech_pvt, TFLAG_IO);
//switch_thread_cond_signal(tech_pvt->cond);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s CHANNEL HANGUP\n", switch_channel_get_name(channel));
}
#endif
+ switch_thread_rwlock_unlock(tech_pvt->rtmp_session->rwlock);
+
return SWITCH_STATUS_SUCCESS;
}
rtmp_handle_invoke(rsession, rsession->amfnumber);
break;
case RTMP_TYPE_AUDIO: /* Audio data */
+ switch_thread_rwlock_wrlock(rsession->rwlock);
if (rsession->tech_pvt) {
uint16_t len = state->origlen;
if (!rsession->tech_pvt->readbuf) {
+ switch_thread_rwlock_unlock(rsession->rwlock);
return SWITCH_STATUS_FALSE;
}
}
switch_mutex_unlock(rsession->tech_pvt->readbuf_mutex);
}
+ switch_thread_rwlock_unlock(rsession->rwlock);
+
break;
case RTMP_TYPE_VIDEO: /* Video data */
case RTMP_TYPE_METADATA: /* Metadata */