diff --git a/common/source/LinuxUtils.cpp b/common/source/LinuxUtils.cpp index 653a1f892..b019b8317 100644 --- a/common/source/LinuxUtils.cpp +++ b/common/source/LinuxUtils.cpp @@ -24,32 +24,41 @@ #include #include #include +#include namespace { -constexpr uid_t kNoOwnerChange = -1; // -1 means chown() won't change the owner -constexpr gid_t kNoGroupChange = -1; // -1 means chown() won't change the group +constexpr uid_t kNoOwnerChange = -1; // -1 means chown() won't change the owner +constexpr gid_t kNoGroupChange = -1; // -1 means chown() won't change the group +constexpr size_t kDefaultBufferSize = 4096; // Fallback buffer size uid_t getFileOwnerId(const std::string &fileOwner) { uid_t ownerId = kNoOwnerChange; - // sysconf returns long; -1 on error. Store as int64_t to avoid unsigned conversion issues. - const int64_t bufferSizeLong = sysconf(_SC_GETPW_R_SIZE_MAX); - if (!fileOwner.empty() && bufferSizeLong > 0) + if (!fileOwner.empty()) { - const size_t kBufferSize = static_cast(bufferSizeLong); + const int64_t bufferSizeLong = sysconf(_SC_GETPW_R_SIZE_MAX); + const size_t kBufferSize = (bufferSizeLong > 0) ? static_cast(bufferSizeLong) : kDefaultBufferSize; + errno = 0; passwd passwordStruct{}; passwd *passwordResult = nullptr; - char buffer[kBufferSize]; - int result = getpwnam_r(fileOwner.c_str(), &passwordStruct, buffer, kBufferSize, &passwordResult); - if (result == 0 && passwordResult) + std::vector buffer(kBufferSize); + int result = getpwnam_r(fileOwner.c_str(), &passwordStruct, buffer.data(), buffer.size(), &passwordResult); + if (result == 0) { - ownerId = passwordResult->pw_uid; + if (passwordResult) + { + ownerId = passwordResult->pw_uid; + } + else + { + RIALTO_COMMON_LOG_WARN("Owner name '%s' not found", fileOwner.c_str()); + } } else { - RIALTO_COMMON_LOG_SYS_WARN(errno, "Failed to determine ownerId for '%s'", fileOwner.c_str()); + RIALTO_COMMON_LOG_SYS_WARN(result, "Failed to lookup ownerId for '%s'", fileOwner.c_str()); } } return ownerId; @@ -58,23 +67,30 @@ uid_t getFileOwnerId(const std::string &fileOwner) gid_t getFileGroupId(const std::string &fileGroup) { gid_t groupId = kNoGroupChange; - // sysconf returns long; -1 on error. Store as int64_t to avoid unsigned conversion issues. - const int64_t bufferSizeLong = sysconf(_SC_GETGR_R_SIZE_MAX); - if (!fileGroup.empty() && bufferSizeLong > 0) + if (!fileGroup.empty()) { - const size_t kBufferSize = static_cast(bufferSizeLong); + const int64_t bufferSizeLong = sysconf(_SC_GETGR_R_SIZE_MAX); + const size_t kBufferSize = (bufferSizeLong > 0) ? static_cast(bufferSizeLong) : kDefaultBufferSize; + errno = 0; group groupStruct{}; group *groupResult = nullptr; - char buffer[kBufferSize]; - int result = getgrnam_r(fileGroup.c_str(), &groupStruct, buffer, kBufferSize, &groupResult); - if (result == 0 && groupResult) + std::vector buffer(kBufferSize); + int result = getgrnam_r(fileGroup.c_str(), &groupStruct, buffer.data(), buffer.size(), &groupResult); + if (result == 0) { - groupId = groupResult->gr_gid; + if (groupResult) + { + groupId = groupResult->gr_gid; + } + else + { + RIALTO_COMMON_LOG_WARN("Group name '%s' not found", fileGroup.c_str()); + } } else { - RIALTO_COMMON_LOG_SYS_WARN(errno, "Failed to determine groupId for '%s'", fileGroup.c_str()); + RIALTO_COMMON_LOG_SYS_WARN(result, "Failed to lookup groupId for '%s'", fileGroup.c_str()); } } return groupId; diff --git a/ipc/common/source/NamedSocket.cpp b/ipc/common/source/NamedSocket.cpp index af89b485b..a6e855605 100644 --- a/ipc/common/source/NamedSocket.cpp +++ b/ipc/common/source/NamedSocket.cpp @@ -29,11 +29,13 @@ #include #include #include +#include namespace { -constexpr uid_t kNoOwnerChange = -1; // -1 means chown() won't change the owner -constexpr gid_t kNoGroupChange = -1; // -1 means chown() won't change the group +constexpr uid_t kNoOwnerChange = -1; // -1 means chown() won't change the owner +constexpr gid_t kNoGroupChange = -1; // -1 means chown() won't change the group +constexpr size_t kDefaultBufferSize = 4096; // Fallback buffer size } // namespace namespace firebolt::rialto::ipc @@ -269,23 +271,30 @@ bool NamedSocket::getSocketLock() uid_t NamedSocket::getSocketOwnerId(const std::string &socketOwner) const { uid_t ownerId = kNoOwnerChange; - // sysconf returns long; -1 on error. Store as int64_t to avoid unsigned conversion issues. - const int64_t bufferSizeLong = sysconf(_SC_GETPW_R_SIZE_MAX); - if (!socketOwner.empty() && bufferSizeLong > 0) + if (!socketOwner.empty()) { - const size_t kBufferSize = static_cast(bufferSizeLong); + const int64_t bufferSizeLong = sysconf(_SC_GETPW_R_SIZE_MAX); + const size_t kBufferSize = (bufferSizeLong > 0) ? static_cast(bufferSizeLong) : kDefaultBufferSize; + errno = 0; passwd passwordStruct{}; passwd *passwordResult = nullptr; - char buffer[kBufferSize]; - int result = getpwnam_r(socketOwner.c_str(), &passwordStruct, buffer, kBufferSize, &passwordResult); - if (result == 0 && passwordResult) + std::vector buffer(kBufferSize); + int result = getpwnam_r(socketOwner.c_str(), &passwordStruct, buffer.data(), buffer.size(), &passwordResult); + if (result == 0) { - ownerId = passwordResult->pw_uid; + if (passwordResult) + { + ownerId = passwordResult->pw_uid; + } + else + { + RIALTO_IPC_LOG_WARN("Owner name '%s' not found", socketOwner.c_str()); + } } else { - RIALTO_IPC_LOG_SYS_WARN(errno, "Failed to determine ownerId for '%s'", socketOwner.c_str()); + RIALTO_IPC_LOG_SYS_WARN(result, "Failed to lookup ownerId for '%s'", socketOwner.c_str()); } } return ownerId; @@ -294,23 +303,30 @@ uid_t NamedSocket::getSocketOwnerId(const std::string &socketOwner) const gid_t NamedSocket::getSocketGroupId(const std::string &socketGroup) const { gid_t groupId = kNoGroupChange; - // sysconf returns long; -1 on error. Store as int64_t to avoid unsigned conversion issues. - const int64_t bufferSizeLong = sysconf(_SC_GETGR_R_SIZE_MAX); - if (!socketGroup.empty() && bufferSizeLong > 0) + if (!socketGroup.empty()) { - const size_t kBufferSize = static_cast(bufferSizeLong); + const int64_t bufferSizeLong = sysconf(_SC_GETGR_R_SIZE_MAX); + const size_t kBufferSize = (bufferSizeLong > 0) ? static_cast(bufferSizeLong) : kDefaultBufferSize; + errno = 0; group groupStruct{}; group *groupResult = nullptr; - char buffer[kBufferSize]; - int result = getgrnam_r(socketGroup.c_str(), &groupStruct, buffer, kBufferSize, &groupResult); - if (result == 0 && groupResult) + std::vector buffer(kBufferSize); + int result = getgrnam_r(socketGroup.c_str(), &groupStruct, buffer.data(), buffer.size(), &groupResult); + if (result == 0) { - groupId = groupResult->gr_gid; + if (groupResult) + { + groupId = groupResult->gr_gid; + } + else + { + RIALTO_IPC_LOG_WARN("Group name '%s' not found", socketGroup.c_str()); + } } else { - RIALTO_IPC_LOG_SYS_WARN(errno, "Failed to determine groupId for '%s'", socketGroup.c_str()); + RIALTO_IPC_LOG_SYS_WARN(result, "Failed to lookup groupId for '%s'", socketGroup.c_str()); } } return groupId; diff --git a/media/public/include/IMediaPipeline.h b/media/public/include/IMediaPipeline.h index c1820f302..704908226 100644 --- a/media/public/include/IMediaPipeline.h +++ b/media/public/include/IMediaPipeline.h @@ -543,7 +543,7 @@ class IMediaPipeline * * @retval the media key session id. */ - const int32_t getMediaKeySessionId() const { return m_mediaKeySessionId; } + int32_t getMediaKeySessionId() const { return m_mediaKeySessionId; } /** * @brief Returns the key id. Empty if unencrypted. @@ -571,14 +571,14 @@ class IMediaPipeline * * @retval the initWithLast15 value. */ - const uint32_t getInitWithLast15() const { return m_initWithLast15; } + uint32_t getInitWithLast15() const { return m_initWithLast15; } /** * @brief Returns the segment alignment * * @retval the segment alignment */ - const SegmentAlignment getSegmentAlignment() const { return m_alignment; } + SegmentAlignment getSegmentAlignment() const { return m_alignment; } /** * @brief Gets the codec data @@ -602,7 +602,7 @@ class IMediaPipeline * * @retval if the encryption pattern has been set */ - const bool getEncryptionPattern(uint32_t &crypt, uint32_t &skip) const + bool getEncryptionPattern(uint32_t &crypt, uint32_t &skip) const { crypt = m_crypt; skip = m_skip; diff --git a/media/server/gstplayer/include/WebAudioPlayerContext.h b/media/server/gstplayer/include/WebAudioPlayerContext.h index 3fda093c7..6394fe8c6 100644 --- a/media/server/gstplayer/include/WebAudioPlayerContext.h +++ b/media/server/gstplayer/include/WebAudioPlayerContext.h @@ -66,6 +66,11 @@ struct WebAudioPlayerContext */ uint32_t lastBytesWritten{}; + /** + * @brief Counter that increments each time a write operation completes. + */ + uint32_t writeCompletionCounter{}; + /** * @brief The number of bytes per sample. */ diff --git a/media/server/gstplayer/source/GstGenericPlayer.cpp b/media/server/gstplayer/source/GstGenericPlayer.cpp index 85fcef5b3..fc1dc1811 100644 --- a/media/server/gstplayer/source/GstGenericPlayer.cpp +++ b/media/server/gstplayer/source/GstGenericPlayer.cpp @@ -2037,7 +2037,7 @@ bool GstGenericPlayer::setSyncOff() if (m_glibWrapper->gObjectClassFindProperty(G_OBJECT_GET_CLASS(decoder), "sync-off")) { - gboolean syncOffGboolean{decoder ? TRUE : FALSE}; + gboolean syncOffGboolean{syncOff ? TRUE : FALSE}; m_glibWrapper->gObjectSet(decoder, "sync-off", syncOffGboolean, nullptr); result = true; } @@ -2135,8 +2135,13 @@ bool GstGenericPlayer::setRenderFrame() RIALTO_SERVER_LOG_INFO("Rendering preroll"); m_glibWrapper->gObjectSet(sink, kStepOnPrerollPropertyName.c_str(), 1, nullptr); - m_gstWrapper->gstElementSendEvent(sink, m_gstWrapper->gstEventNewStep(GST_FORMAT_BUFFERS, 1, 1.0, true, - false)); + gboolean sendRet = + m_gstWrapper->gstElementSendEvent(sink, m_gstWrapper->gstEventNewStep(GST_FORMAT_BUFFERS, 1, 1.0, + true, false)); + if (!sendRet) + { + RIALTO_SERVER_LOG_WARN("Failed to send step event for rendering preroll frame"); + } m_glibWrapper->gObjectSet(sink, kStepOnPrerollPropertyName.c_str(), 0, nullptr); result = true; } diff --git a/media/server/gstplayer/source/GstWebAudioPlayer.cpp b/media/server/gstplayer/source/GstWebAudioPlayer.cpp index 551730e15..ab2582120 100644 --- a/media/server/gstplayer/source/GstWebAudioPlayer.cpp +++ b/media/server/gstplayer/source/GstWebAudioPlayer.cpp @@ -410,9 +410,13 @@ uint32_t GstWebAudioPlayer::writeBuffer(uint8_t *mainPtr, uint32_t mainLength, u { // Must block and wait for the data to be written from the shared buffer. std::unique_lock lock(m_context.writeBufferMutex); + const uint32_t initialCompletionCounter = m_context.writeCompletionCounter; m_workerThread->enqueueTask(m_taskFactory->createWriteBuffer(m_context, mainPtr, mainLength, wrapPtr, wrapLength)); - std::cv_status status = m_context.writeBufferCond.wait_for(lock, std::chrono::milliseconds(kMaxWriteBufferTimeoutMs)); - if (std::cv_status::timeout == status) + bool success = + m_context.writeBufferCond.wait_for(lock, std::chrono::milliseconds(kMaxWriteBufferTimeoutMs), + [this, initialCompletionCounter]() + { return m_context.writeCompletionCounter != initialCompletionCounter; }); + if (!success) { RIALTO_SERVER_LOG_ERROR("Timed out writing to the gstreamer buffers"); return 0; @@ -470,4 +474,4 @@ void GstWebAudioPlayer::ping(std::unique_ptr &&heartbeatHandl } } -}; // namespace firebolt::rialto::server +} // namespace firebolt::rialto::server diff --git a/media/server/gstplayer/source/tasks/webAudio/WriteBuffer.cpp b/media/server/gstplayer/source/tasks/webAudio/WriteBuffer.cpp index bda9b5685..2827817c7 100644 --- a/media/server/gstplayer/source/tasks/webAudio/WriteBuffer.cpp +++ b/media/server/gstplayer/source/tasks/webAudio/WriteBuffer.cpp @@ -102,6 +102,7 @@ void WriteBuffer::execute() const { std::unique_lock lock(m_context.writeBufferMutex); m_context.lastBytesWritten = bytesWritten; + ++m_context.writeCompletionCounter; } m_context.writeBufferCond.notify_one(); } diff --git a/media/server/ipc/source/MediaPipelineModuleService.cpp b/media/server/ipc/source/MediaPipelineModuleService.cpp index 8976d1c20..b99b7de83 100644 --- a/media/server/ipc/source/MediaPipelineModuleService.cpp +++ b/media/server/ipc/source/MediaPipelineModuleService.cpp @@ -429,10 +429,10 @@ void MediaPipelineModuleService::attachSource(::google::protobuf::RpcController std::shared_ptr codecData{}; if (request->has_codec_data()) { - auto codecDataProto = request->codec_data(); + const auto &kCodecDataProto = request->codec_data(); codecData = std::make_shared(); - codecData->data = std::vector(codecDataProto.data().begin(), codecDataProto.data().end()); - codecData->type = convertCodecDataType(codecDataProto.type()); + codecData->data = std::vector(kCodecDataProto.data().begin(), kCodecDataProto.data().end()); + codecData->type = convertCodecDataType(kCodecDataProto.type()); } std::unique_ptr mediaSource; firebolt::rialto::SourceConfigType configType = convertConfigType(request->config_type()); diff --git a/media/server/main/interface/IMainThread.h b/media/server/main/interface/IMainThread.h index 7e9a12f2a..3a920a67a 100644 --- a/media/server/main/interface/IMainThread.h +++ b/media/server/main/interface/IMainThread.h @@ -20,7 +20,6 @@ #ifndef FIREBOLT_RIALTO_SERVER_I_MAIN_THREAD_H_ #define FIREBOLT_RIALTO_SERVER_I_MAIN_THREAD_H_ -#include "IMainThread.h" #include #include #include diff --git a/media/server/main/source/MainThread.cpp b/media/server/main/source/MainThread.cpp index 38aa64746..8b51f30eb 100644 --- a/media/server/main/source/MainThread.cpp +++ b/media/server/main/source/MainThread.cpp @@ -112,9 +112,9 @@ const std::shared_ptr MainThread::waitForTask() { m_taskQueueCv.wait(lock, [this] { return !m_taskQueue.empty(); }); } - const auto kTaskInfo = m_taskQueue.front(); + auto taskInfo = std::move(m_taskQueue.front()); m_taskQueue.pop_front(); - return kTaskInfo; + return taskInfo; } int32_t MainThread::registerClient() diff --git a/serverManager/common/source/SessionServerAppManager.cpp b/serverManager/common/source/SessionServerAppManager.cpp index 08b465973..38bb178e9 100644 --- a/serverManager/common/source/SessionServerAppManager.cpp +++ b/serverManager/common/source/SessionServerAppManager.cpp @@ -491,7 +491,7 @@ bool SessionServerAppManager::configureSessionServerWithSocketName(const std::sh const auto kSocketPermissions{kSessionServer->getSessionManagementSocketPermissions()}; const auto kSocketOwner{kSessionServer->getSessionManagementSocketOwner()}; const auto kSocketGroup{kSessionServer->getSessionManagementSocketGroup()}; - const auto kAppName{kSessionServer->getAppName()}; + const auto &kAppName{kSessionServer->getAppName()}; const firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{kSessionServer->getMaxPlaybackSessions(), kSessionServer->getMaxWebAudioPlayers()}; @@ -513,7 +513,7 @@ bool SessionServerAppManager::configureSessionServerWithSocketFd(const std::shar const auto kInitialState{kSessionServer->getInitialState()}; const auto kSocketFd{kSessionServer->getSessionManagementSocketFd()}; const auto kClientDisplayName{kSessionServer->getClientDisplayName()}; - const auto kAppName{kSessionServer->getAppName()}; + const auto &kAppName{kSessionServer->getAppName()}; const firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{kSessionServer->getMaxPlaybackSessions(), kSessionServer->getMaxWebAudioPlayers()}; diff --git a/serverManager/serverManagerSim/RialtoServerManagerSim.cpp b/serverManager/serverManagerSim/RialtoServerManagerSim.cpp index bb57f8822..f2b0722df 100644 --- a/serverManager/serverManagerSim/RialtoServerManagerSim.cpp +++ b/serverManager/serverManagerSim/RialtoServerManagerSim.cpp @@ -91,43 +91,51 @@ catch (const std::exception &e) int main(int argc, char *argv[]) { - fprintf(stderr, "===========================================================================\n"); - fprintf(stderr, "== RIALTO SERVER MANAGER SIM ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== Test application is a Http Server running on localhost:9008 ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== To set state, send POST HttpRequest /SetState/AppName/NewState ==\n"); - fprintf(stderr, "== Available states: Inactive, Active, NotRunning, Error ==\n"); - fprintf(stderr, "== For example: ==\n"); - fprintf(stderr, "== curl -X POST -d \"\" :9008/SetState/YouTube/NotRunning ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== Custom socket name can be set in POST data. Available values are: ==\n"); - fprintf(stderr, "== - Empty string (socket name will be automatically generated) ==\n"); - fprintf(stderr, "== - Full socket path, e.g. POST -d \"/var/customsocket\" ==\n"); - fprintf(stderr, "== - Socket name, e.g. POST -d \"sock\" will create /tmp/sock socket ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== To get current state, send GET HttpRequest: /GetState/AppName ==\n"); - fprintf(stderr, "== For example: ==\n"); - fprintf(stderr, "== curl -X GET :9008/GetState/YouTube ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== To get application info, send GET HttpRequest: /GetAppInfo/AppName ==\n"); - fprintf(stderr, "== For example: ==\n"); - fprintf(stderr, "== curl -X GET :9008/GetAppInfo/YouTube ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== To set log levels, send POST HttpRequest: /SetLog// ==\n"); - fprintf(stderr, "== For example: ==\n"); - fprintf(stderr, "== curl -X POST -d \"\" :9008/SetLog/client/error ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "== To shutdown Test Service, send POST HttpRequest: /Quit ==\n"); - fprintf(stderr, "== For example: ==\n"); - fprintf(stderr, "== curl -X POST -d \"\" :9008/Quit ==\n"); - fprintf(stderr, "== ==\n"); - fprintf(stderr, "===========================================================================\n"); + try + { + fprintf(stderr, "===========================================================================\n"); + fprintf(stderr, "== RIALTO SERVER MANAGER SIM ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== Test application is a Http Server running on localhost:9008 ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== To set state, send POST HttpRequest /SetState/AppName/NewState ==\n"); + fprintf(stderr, "== Available states: Inactive, Active, NotRunning, Error ==\n"); + fprintf(stderr, "== For example: ==\n"); + fprintf(stderr, "== curl -X POST -d \"\" :9008/SetState/YouTube/NotRunning ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== Custom socket name can be set in POST data. Available values are: ==\n"); + fprintf(stderr, "== - Empty string (socket name will be automatically generated) ==\n"); + fprintf(stderr, "== - Full socket path, e.g. POST -d \"/var/customsocket\" ==\n"); + fprintf(stderr, "== - Socket name, e.g. POST -d \"sock\" will create /tmp/sock socket ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== To get current state, send GET HttpRequest: /GetState/AppName ==\n"); + fprintf(stderr, "== For example: ==\n"); + fprintf(stderr, "== curl -X GET :9008/GetState/YouTube ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== To get application info, send GET HttpRequest: /GetAppInfo/AppName ==\n"); + fprintf(stderr, "== For example: ==\n"); + fprintf(stderr, "== curl -X GET :9008/GetAppInfo/YouTube ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== To set log levels, send POST HttpRequest: /SetLog// ==\n"); + fprintf(stderr, "== For example: ==\n"); + fprintf(stderr, "== curl -X POST -d \"\" :9008/SetLog/client/error ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "== To shutdown Test Service, send POST HttpRequest: /Quit ==\n"); + fprintf(stderr, "== For example: ==\n"); + fprintf(stderr, "== curl -X POST -d \"\" :9008/Quit ==\n"); + fprintf(stderr, "== ==\n"); + fprintf(stderr, "===========================================================================\n"); - firebolt::rialto::common::ServerManagerConfig config{getEnvironmentVariables(), getNumberOfPreloadedServers(), - getSessionServerPath(), getStartupTimeout()}; - rialto::servermanager::TestService service{config}; - service.run(); + firebolt::rialto::common::ServerManagerConfig config{getEnvironmentVariables(), getNumberOfPreloadedServers(), + getSessionServerPath(), getStartupTimeout()}; + rialto::servermanager::TestService service{config}; + service.run(); - return 0; + return 0; + } + catch (const std::exception &e) + { + fprintf(stderr, "Fatal error: %s\n", e.what()); + return 1; + } } diff --git a/serverManager/service/include/ConfigReader.h b/serverManager/service/include/ConfigReader.h index 6c2ba8735..f2810c3f8 100644 --- a/serverManager/service/include/ConfigReader.h +++ b/serverManager/service/include/ConfigReader.h @@ -34,8 +34,8 @@ namespace rialto::servermanager::service class ConfigReader : public IConfigReader { public: - ConfigReader(std::shared_ptr jsonWrapper, - std::shared_ptr fileReader); + ConfigReader(const std::shared_ptr &jsonWrapper, + const std::shared_ptr &fileReader); bool read() override; std::list getEnvironmentVariables() override; @@ -51,23 +51,23 @@ class ConfigReader : public IConfigReader std::optional getNumOfPingsBeforeRecovery() override; private: - void parseEnvironmentVariables(std::shared_ptr root); - void parseExtraEnvVariables(std::shared_ptr root); - void parseSessionServerPath(std::shared_ptr root); - void parseSessionServerStartupTimeout(std::shared_ptr root); - void parseHealthcheckInterval(std::shared_ptr root); - void parseSocketPermissions(std::shared_ptr root); - void parseSocketOwner(std::shared_ptr root); - void parseSocketGroup(std::shared_ptr root); - void parseNumOfPreloadedServers(std::shared_ptr root); - void parseLogLevel(std::shared_ptr root); - void parseNumOfPingsBeforeRecovery(std::shared_ptr root); + void parseEnvironmentVariables(const std::shared_ptr &root); + void parseExtraEnvVariables(const std::shared_ptr &root); + void parseSessionServerPath(const std::shared_ptr &root); + void parseSessionServerStartupTimeout(const std::shared_ptr &root); + void parseHealthcheckInterval(const std::shared_ptr &root); + void parseSocketPermissions(const std::shared_ptr &root); + void parseSocketOwner(const std::shared_ptr &root); + void parseSocketGroup(const std::shared_ptr &root); + void parseNumOfPreloadedServers(const std::shared_ptr &root); + void parseLogLevel(const std::shared_ptr &root); + void parseNumOfPingsBeforeRecovery(const std::shared_ptr &root); - std::list getListOfStrings(std::shared_ptr root, + std::list getListOfStrings(const std::shared_ptr &root, const std::string &valueName) const; - std::optional getString(std::shared_ptr root, + std::optional getString(const std::shared_ptr &root, const std::string &valueName) const; - std::optional getUInt(std::shared_ptr root, + std::optional getUInt(const std::shared_ptr &root, const std::string &valueName) const; std::shared_ptr m_jsonWrapper; diff --git a/serverManager/service/source/ConfigReader.cpp b/serverManager/service/source/ConfigReader.cpp index 551935997..200f94945 100644 --- a/serverManager/service/source/ConfigReader.cpp +++ b/serverManager/service/source/ConfigReader.cpp @@ -24,8 +24,8 @@ namespace rialto::servermanager::service { -ConfigReader::ConfigReader(std::shared_ptr jsonWrapper, - std::shared_ptr fileReader) +ConfigReader::ConfigReader(const std::shared_ptr &jsonWrapper, + const std::shared_ptr &fileReader) : m_jsonWrapper(jsonWrapper), m_fileReader(fileReader) { } @@ -60,22 +60,22 @@ bool ConfigReader::read() return true; } -void ConfigReader::parseEnvironmentVariables(std::shared_ptr root) +void ConfigReader::parseEnvironmentVariables(const std::shared_ptr &root) { m_envVars = getListOfStrings(root, "environmentVariables"); } -void ConfigReader::parseExtraEnvVariables(std::shared_ptr root) +void ConfigReader::parseExtraEnvVariables(const std::shared_ptr &root) { m_extraEnvVars = getListOfStrings(root, "extraEnvVariables"); } -void ConfigReader::parseSessionServerPath(std::shared_ptr root) +void ConfigReader::parseSessionServerPath(const std::shared_ptr &root) { m_sessionServerPath = getString(root, "sessionServerPath"); } -void ConfigReader::parseSessionServerStartupTimeout(std::shared_ptr root) +void ConfigReader::parseSessionServerStartupTimeout(const std::shared_ptr &root) { auto timeout{getUInt(root, "startupTimeoutMs")}; if (timeout.has_value()) @@ -84,7 +84,7 @@ void ConfigReader::parseSessionServerStartupTimeout(std::shared_ptr root) +void ConfigReader::parseHealthcheckInterval(const std::shared_ptr &root) { auto interval{getUInt(root, "healthcheckIntervalInSeconds")}; if (interval.has_value()) @@ -93,7 +93,7 @@ void ConfigReader::parseHealthcheckInterval(std::shared_ptr root) +void ConfigReader::parseSocketPermissions(const std::shared_ptr &root) { auto permissions{getUInt(root, "socketPermissions")}; if (permissions.has_value()) @@ -106,22 +106,22 @@ void ConfigReader::parseSocketPermissions(std::shared_ptr root) +void ConfigReader::parseSocketOwner(const std::shared_ptr &root) { m_socketOwner = getString(root, "socketOwner"); } -void ConfigReader::parseSocketGroup(std::shared_ptr root) +void ConfigReader::parseSocketGroup(const std::shared_ptr &root) { m_socketGroup = getString(root, "socketGroup"); } -void ConfigReader::parseNumOfPreloadedServers(std::shared_ptr root) +void ConfigReader::parseNumOfPreloadedServers(const std::shared_ptr &root) { m_numOfPreloadedServers = getUInt(root, "numOfPreloadedServers"); } -void ConfigReader::parseLogLevel(std::shared_ptr root) +void ConfigReader::parseLogLevel(const std::shared_ptr &root) { std::optional loggingLevel{getUInt(root, "logLevel")}; @@ -157,7 +157,7 @@ void ConfigReader::parseLogLevel(std::shared_ptr root) +void ConfigReader::parseNumOfPingsBeforeRecovery(const std::shared_ptr &root) { m_numOfPingsBeforeRecovery = getUInt(root, "numOfPingsBeforeRecovery"); } @@ -217,8 +217,9 @@ std::optional ConfigReader::getNumOfPingsBeforeRecovery() return m_numOfPingsBeforeRecovery; } -std::list ConfigReader::getListOfStrings(std::shared_ptr root, - const std::string &valueName) const +std::list +ConfigReader::getListOfStrings(const std::shared_ptr &root, + const std::string &valueName) const { std::list result; if (root->isMember(valueName) && root->at(valueName)->isArray()) @@ -236,8 +237,9 @@ std::list ConfigReader::getListOfStrings(std::shared_ptr ConfigReader::getString(std::shared_ptr root, - const std::string &valueName) const +std::optional +ConfigReader::getString(const std::shared_ptr &root, + const std::string &valueName) const { if (root->isMember(valueName) && root->at(valueName)->isString()) { @@ -246,7 +248,7 @@ std::optional ConfigReader::getString(std::shared_ptr ConfigReader::getUInt(std::shared_ptr root, +std::optional ConfigReader::getUInt(const std::shared_ptr &root, const std::string &valueName) const { if (root->isMember(valueName) && root->at(valueName)->isUInt()) diff --git a/tests/componenttests/server/tests/webAudio/WebAudioTestMethods.cpp b/tests/componenttests/server/tests/webAudio/WebAudioTestMethods.cpp index 1d34fe7e3..cb67c0f6a 100644 --- a/tests/componenttests/server/tests/webAudio/WebAudioTestMethods.cpp +++ b/tests/componenttests/server/tests/webAudio/WebAudioTestMethods.cpp @@ -17,6 +17,7 @@ * limitations under the License. */ +#include #include #include @@ -80,7 +81,12 @@ void WebAudioTestMethods::initShm() ConfigureAction(m_clientStub) .send(getShmReq) .expectSuccess() - .matchResponse([&](const auto &resp) { m_shmHandle.init(resp.fd(), resp.size()); }); + .matchResponse( + [&](const auto &resp) + { + m_shmHandle.init(resp.fd(), resp.size()); + std::memset(m_shmHandle.getShm(), 0, resp.size()); + }); } int WebAudioTestMethods::checkInitialBufferAvailable() diff --git a/tests/unittests/media/server/gstplayer/webAudioPlayer/GstWebAudioPlayerTest.cpp b/tests/unittests/media/server/gstplayer/webAudioPlayer/GstWebAudioPlayerTest.cpp index 2f8b9ad37..2c6be6022 100644 --- a/tests/unittests/media/server/gstplayer/webAudioPlayer/GstWebAudioPlayerTest.cpp +++ b/tests/unittests/media/server/gstplayer/webAudioPlayer/GstWebAudioPlayerTest.cpp @@ -21,6 +21,7 @@ #include "HeartbeatHandlerMock.h" #include "PlayerTaskMock.h" #include "WebAudioUtil.h" +#include #include using testing::DoAll; @@ -63,6 +64,7 @@ class GstWebAudioPlayerTest : public GstWebAudioPlayerTestCommon { std::unique_lock lock(context.writeBufferMutex); context.lastBytesWritten = m_bytesWritten; + ++context.writeCompletionCounter; } context.writeBufferCond.notify_one(); } diff --git a/wrappers/source/OcdmSession.cpp b/wrappers/source/OcdmSession.cpp index 5ea989b6c..f9260f30d 100644 --- a/wrappers/source/OcdmSession.cpp +++ b/wrappers/source/OcdmSession.cpp @@ -70,7 +70,7 @@ const char *convertInitDataType(const firebolt::rialto::InitDataType &initDataTy } } } -const firebolt::rialto::KeyStatus convertKeyStatus(const KeyStatus &ocdmKeyStatus) +firebolt::rialto::KeyStatus convertKeyStatus(const KeyStatus &ocdmKeyStatus) { switch (ocdmKeyStatus) {