LoggerE("Failed to unset playback info listener");
}
- if (nullptr != handle_ && MEDIA_CONTROLLER_ERROR_NONE != mc_client_destroy(handle_)) {
- LoggerE("Unable to destroy media controller client");
+ {
+ std::lock_guard<std::mutex> lock(handle_mutex_);
+ if (nullptr != handle_ && MEDIA_CONTROLLER_ERROR_NONE != mc_client_destroy(handle_)) {
+ LoggerE("Unable to destroy media controller client");
+ }
+ handle_ = nullptr;
}
}
PlatformResult MediaControllerClient::FindServers(picojson::array* servers) {
ScopeLogger();
int ret;
-
- ret = mc_client_foreach_server(handle_, FindServersCallback, servers);
+ {
+ std::lock_guard<std::mutex> lock(handle_mutex_);
+ ret = mc_client_foreach_server(handle_, FindServersCallback, servers);
+ }
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Unable to fetch active servers, error",
free(name);
};
mc_server_state_e state;
- ret = mc_client_get_latest_server_info(handle_, &name, &state);
+ {
+ std::lock_guard<std::mutex> lock(handle_mutex_);
+ ret = mc_client_get_latest_server_info(handle_, &name, &state);
+ }
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Error getting latest server info",
SCOPE_EXIT {
free(request_id);
};*/
+ std::lock_guard<std::mutex> lock(handle_mutex_);
int ret = mc_client_send_playback_action_cmd(handle_, server_name.c_str(), action_e, nullptr);
if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Error sending playback state",
SCOPE_EXIT {
free(request_id);
};*/
+ std::lock_guard<std::mutex> lock(handle_mutex_);
int ret = mc_client_send_playback_position_cmd(handle_, server_name.c_str(),
static_cast<unsigned long long>(position),
/*&request_id*/ nullptr);
SCOPE_EXIT {
free(request_id);
};*/
+ std::lock_guard<std::mutex> lock(handle_mutex_);
int ret = mc_client_send_shuffle_mode_cmd(handle_, server_name.c_str(),
mode ? MC_SHUFFLE_MODE_ON : MC_SHUFFLE_MODE_OFF,
/*&request_id*/ nullptr);
#define MEDIACONTROLLER_MEDIACONTROLLER_CLIENT_H_
#include <media_controller_client.h>
+#include <mutex>
#include <string>
#include "common/platform_result.h"
private:
mc_client_h handle_;
+ // This mutex is used to guard handle_ usage in TaskQueue
+ // and its destruction, but there is no need to
+ // guard every call on main thread.
+ std::mutex handle_mutex_;
+
JsonCallback playback_info_listener_;
JsonCallback server_status_listener_;
JsonCallback command_reply_callback_;