io_context cleanups

This commit is contained in:
badaix 2022-04-03 15:27:28 +02:00
parent 945e19a4eb
commit bdc6299523
11 changed files with 18 additions and 26 deletions

View file

@ -93,7 +93,7 @@ bool PendingRequest::operator<(const PendingRequest& other) const
ClientConnection::ClientConnection(boost::asio::io_context& io_context, const ClientSettings::Server& server) ClientConnection::ClientConnection(boost::asio::io_context& io_context, const ClientSettings::Server& server)
: io_context_(io_context), strand_(boost::asio::make_strand(io_context_.get_executor())), resolver_(strand_), socket_(strand_), reqId_(1), server_(server) : strand_(boost::asio::make_strand(io_context.get_executor())), resolver_(strand_), socket_(strand_), reqId_(1), server_(server)
{ {
base_msg_size_ = base_message_.getSize(); base_msg_size_ = base_message_.getSize();
buffer_.resize(base_msg_size_); buffer_.resize(base_msg_size_);

View file

@ -140,7 +140,6 @@ protected:
std::vector<char> buffer_; std::vector<char> buffer_;
size_t base_msg_size_; size_t base_msg_size_;
boost::asio::io_context& io_context_;
boost::asio::strand<boost::asio::any_io_executor> strand_; boost::asio::strand<boost::asio::any_io_executor> strand_;
tcp::resolver resolver_; tcp::resolver resolver_;
tcp::socket socket_; tcp::socket socket_;

View file

@ -55,7 +55,7 @@ ControlServer::~ControlServer()
void ControlServer::cleanup() void ControlServer::cleanup()
{ {
auto new_end = std::remove_if(sessions_.begin(), sessions_.end(), [](std::weak_ptr<ControlSession> session) { return session.expired(); }); auto new_end = std::remove_if(sessions_.begin(), sessions_.end(), [](const std::weak_ptr<ControlSession>& session) { return session.expired(); });
auto count = distance(new_end, sessions_.end()); auto count = distance(new_end, sessions_.end());
if (count > 0) if (count > 0)
{ {

View file

@ -41,7 +41,7 @@ struct mDNSService
class PublishmDNS class PublishmDNS
{ {
public: public:
PublishmDNS(const std::string& serviceName, boost::asio::io_context& ioc) : serviceName_(serviceName), ioc_(ioc) PublishmDNS(const std::string& serviceName, boost::asio::io_context& ioc) : serviceName_(serviceName), io_context_(ioc)
{ {
} }
@ -51,7 +51,7 @@ public:
protected: protected:
std::string serviceName_; std::string serviceName_;
boost::asio::io_context& ioc_; boost::asio::io_context& io_context_;
}; };
#if defined(HAS_AVAHI) #if defined(HAS_AVAHI)

View file

@ -1,6 +1,6 @@
/*** /***
This file is part of snapcast This file is part of snapcast
Copyright (C) 2014-2021 Johannes Pohl Copyright (C) 2014-2022 Johannes Pohl
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -159,7 +159,6 @@ void Server::processRequest(const jsonrpcpp::request_ptr request, const OnRespon
// Notification: {"jsonrpc":"2.0","method":"Client.OnVolumeChanged","params":{"id":"00:21:6a:7d:74:fc","volume":{"muted":false,"percent":74}}} // Notification: {"jsonrpc":"2.0","method":"Client.OnVolumeChanged","params":{"id":"00:21:6a:7d:74:fc","volume":{"muted":false,"percent":74}}}
// clang-format on // clang-format on
// std::lock_guard<std::recursive_mutex> lock(clientMutex_);
clientInfo->config.volume.fromJson(request->params().get("volume")); clientInfo->config.volume.fromJson(request->params().get("volume"));
result["volume"] = clientInfo->config.volume.toJson(); result["volume"] = clientInfo->config.volume.toJson();
notification = std::make_shared<jsonrpcpp::Notification>( notification = std::make_shared<jsonrpcpp::Notification>(
@ -636,7 +635,6 @@ void Server::processRequest(const jsonrpcpp::request_ptr request, const OnRespon
void Server::onMessageReceived(std::shared_ptr<ControlSession> controlSession, const std::string& message, const ResponseHander& response_handler) void Server::onMessageReceived(std::shared_ptr<ControlSession> controlSession, const std::string& message, const ResponseHander& response_handler)
{ {
// LOG(DEBUG, LOG_TAG) << "onMessageReceived: " << message << "\n"; // LOG(DEBUG, LOG_TAG) << "onMessageReceived: " << message << "\n";
// std::lock_guard<std::recursive_mutex> lock(clientMutex_);
std::lock_guard<std::mutex> lock(Config::instance().getMutex()); std::lock_guard<std::mutex> lock(Config::instance().getMutex());
jsonrpcpp::entity_ptr entity(nullptr); jsonrpcpp::entity_ptr entity(nullptr);
try try
@ -712,7 +710,6 @@ void Server::onMessageReceived(std::shared_ptr<ControlSession> controlSession, c
void Server::onMessageReceived(StreamSession* streamSession, const msg::BaseMessage& baseMessage, char* buffer) void Server::onMessageReceived(StreamSession* streamSession, const msg::BaseMessage& baseMessage, char* buffer)
{ {
// std::lock_guard<std::recursive_mutex> lock(clientMutex_);
LOG(DEBUG, LOG_TAG) << "onMessageReceived: " << baseMessage.type << ", size: " << baseMessage.size << ", id: " << baseMessage.id LOG(DEBUG, LOG_TAG) << "onMessageReceived: " << baseMessage.type << ", size: " << baseMessage.size << ", id: " << baseMessage.id
<< ", refers: " << baseMessage.refersTo << ", sent: " << baseMessage.sent.sec << "," << baseMessage.sent.usec << ", refers: " << baseMessage.refersTo << ", sent: " << baseMessage.sent.sec << "," << baseMessage.sent.usec
<< ", recv: " << baseMessage.received.sec << "," << baseMessage.received.usec << "\n"; << ", recv: " << baseMessage.received.sec << "," << baseMessage.received.usec << "\n";

View file

@ -93,8 +93,6 @@ private:
/// @param deferred the delay after the last call to saveConfig /// @param deferred the delay after the last call to saveConfig
void saveConfig(const std::chrono::milliseconds& deferred = std::chrono::seconds(2)); void saveConfig(const std::chrono::milliseconds& deferred = std::chrono::seconds(2));
// mutable std::recursive_mutex controlMutex_;
// mutable std::recursive_mutex clientMutex_;
boost::asio::io_context& io_context_; boost::asio::io_context& io_context_;
boost::asio::steady_timer config_timer_; boost::asio::steady_timer config_timer_;

View file

@ -86,7 +86,6 @@ private:
void onDisconnect(StreamSession* streamSession) override; void onDisconnect(StreamSession* streamSession) override;
mutable std::recursive_mutex sessionsMutex_; mutable std::recursive_mutex sessionsMutex_;
// mutable std::recursive_mutex clientMutex_;
std::vector<std::weak_ptr<StreamSession>> sessions_; std::vector<std::weak_ptr<StreamSession>> sessions_;
boost::asio::io_context& io_context_; boost::asio::io_context& io_context_;
std::vector<acceptor_ptr> acceptor_; std::vector<acceptor_ptr> acceptor_;

View file

@ -46,7 +46,7 @@ static constexpr auto LOG_TAG = "PcmStream";
PcmStream::PcmStream(PcmStream::Listener* pcmListener, boost::asio::io_context& ioc, const ServerSettings& server_settings, const StreamUri& uri) PcmStream::PcmStream(PcmStream::Listener* pcmListener, boost::asio::io_context& ioc, const ServerSettings& server_settings, const StreamUri& uri)
: active_(false), strand_(boost::asio::make_strand(ioc.get_executor())), pcmListeners_{pcmListener}, uri_(uri), chunk_ms_(20), state_(ReaderState::kIdle), : active_(false), strand_(boost::asio::make_strand(ioc.get_executor())), pcmListeners_{pcmListener}, uri_(uri), chunk_ms_(20), state_(ReaderState::kIdle),
ioc_(ioc), server_settings_(server_settings), req_id_(0), property_timer_(strand_) server_settings_(server_settings), req_id_(0), property_timer_(strand_)
{ {
encoder::EncoderFactory encoderFactory; encoder::EncoderFactory encoderFactory;
if (uri_.query.find(kUriCodec) == uri_.query.end()) if (uri_.query.find(kUriCodec) == uri_.query.end())

View file

@ -189,7 +189,6 @@ protected:
std::string name_; std::string name_;
std::atomic<ReaderState> state_; std::atomic<ReaderState> state_;
Properties properties_; Properties properties_;
boost::asio::io_context& ioc_;
ServerSettings server_settings_; ServerSettings server_settings_;
std::unique_ptr<StreamControl> stream_ctrl_; std::unique_ptr<StreamControl> stream_ctrl_;
std::atomic<int> req_id_; std::atomic<int> req_id_;

View file

@ -1,6 +1,6 @@
/*** /***
This file is part of snapcast This file is part of snapcast
Copyright (C) 2014-2021 Johannes Pohl Copyright (C) 2014-2022 Johannes Pohl
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -47,7 +47,7 @@ namespace streamreader
StreamManager::StreamManager(PcmStream::Listener* pcmListener, boost::asio::io_context& ioc, const ServerSettings& settings) StreamManager::StreamManager(PcmStream::Listener* pcmListener, boost::asio::io_context& ioc, const ServerSettings& settings)
// const std::string& defaultSampleFormat, const std::string& defaultCodec, size_t defaultChunkBufferMs) // const std::string& defaultSampleFormat, const std::string& defaultCodec, size_t defaultChunkBufferMs)
: pcmListener_(pcmListener), settings_(settings), ioc_(ioc) : pcmListener_(pcmListener), settings_(settings), io_context_(ioc)
{ {
} }
@ -79,20 +79,20 @@ PcmStreamPtr StreamManager::addStream(StreamUri& streamUri)
if (streamUri.scheme == "pipe") if (streamUri.scheme == "pipe")
{ {
stream = make_shared<PipeStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<PipeStream>(pcmListener_, io_context_, settings_, streamUri);
} }
else if (streamUri.scheme == "file") else if (streamUri.scheme == "file")
{ {
stream = make_shared<FileStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<FileStream>(pcmListener_, io_context_, settings_, streamUri);
} }
else if (streamUri.scheme == "process") else if (streamUri.scheme == "process")
{ {
stream = make_shared<ProcessStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<ProcessStream>(pcmListener_, io_context_, settings_, streamUri);
} }
#ifdef HAS_ALSA #ifdef HAS_ALSA
else if (streamUri.scheme == "alsa") else if (streamUri.scheme == "alsa")
{ {
stream = make_shared<AlsaStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<AlsaStream>(pcmListener_, io_context_, settings_, streamUri);
} }
#endif #endif
else if ((streamUri.scheme == "spotify") || (streamUri.scheme == "librespot")) else if ((streamUri.scheme == "spotify") || (streamUri.scheme == "librespot"))
@ -101,7 +101,7 @@ PcmStreamPtr StreamManager::addStream(StreamUri& streamUri)
// that all constructors of all parent classes also use the overwritten sample // that all constructors of all parent classes also use the overwritten sample
// format. // format.
streamUri.query[kUriSampleFormat] = "44100:16:2"; streamUri.query[kUriSampleFormat] = "44100:16:2";
stream = make_shared<LibrespotStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<LibrespotStream>(pcmListener_, io_context_, settings_, streamUri);
} }
else if (streamUri.scheme == "airplay") else if (streamUri.scheme == "airplay")
{ {
@ -109,15 +109,15 @@ PcmStreamPtr StreamManager::addStream(StreamUri& streamUri)
// that all constructors of all parent classes also use the overwritten sample // that all constructors of all parent classes also use the overwritten sample
// format. // format.
streamUri.query[kUriSampleFormat] = "44100:16:2"; streamUri.query[kUriSampleFormat] = "44100:16:2";
stream = make_shared<AirplayStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<AirplayStream>(pcmListener_, io_context_, settings_, streamUri);
} }
else if (streamUri.scheme == "tcp") else if (streamUri.scheme == "tcp")
{ {
stream = make_shared<TcpStream>(pcmListener_, ioc_, settings_, streamUri); stream = make_shared<TcpStream>(pcmListener_, io_context_, settings_, streamUri);
} }
else if (streamUri.scheme == "meta") else if (streamUri.scheme == "meta")
{ {
stream = make_shared<MetaStream>(pcmListener_, streams_, ioc_, settings_, streamUri); stream = make_shared<MetaStream>(pcmListener_, streams_, io_context_, settings_, streamUri);
} }
else else
{ {

View file

@ -1,6 +1,6 @@
/*** /***
This file is part of snapcast This file is part of snapcast
Copyright (C) 2014-2021 Johannes Pohl Copyright (C) 2014-2022 Johannes Pohl
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -55,7 +55,7 @@ private:
std::vector<PcmStreamPtr> streams_; std::vector<PcmStreamPtr> streams_;
PcmStream::Listener* pcmListener_; PcmStream::Listener* pcmListener_;
ServerSettings settings_; ServerSettings settings_;
boost::asio::io_context& ioc_; boost::asio::io_context& io_context_;
}; };
} // namespace streamreader } // namespace streamreader