Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package soapy-remote for openSUSE:Factory checked in at 2021-03-24 16:16:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/soapy-remote (Old) and /work/SRC/openSUSE:Factory/.soapy-remote.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "soapy-remote" Wed Mar 24 16:16:49 2021 rev:5 rq:881013 version:0.5.2 Changes: -------- --- /work/SRC/openSUSE:Factory/soapy-remote/soapy-remote.changes 2019-01-28 20:50:37.269767475 +0100 +++ /work/SRC/openSUSE:Factory/.soapy-remote.new.2401/soapy-remote.changes 2021-03-24 16:17:54.180250703 +0100 @@ -1,0 +2,10 @@ +Tue Feb 23 19:11:36 UTC 2021 - Wojciech Kazubski <w...@ire.pw.edu.pl> + +- Update to version 0.5.2 + * Support more than 31 clients in SSDP endpoint + * Handle cases where avahi client is null + * Handle EINTR case for SSDP server select + * Fix the scale in CS12 - CF32 conversion + * Protect getServerURLs from re-entrant calls + +------------------------------------------------------------------- Old: ---- soapy-remote-0.5.1.tar.gz New: ---- soapy-remote-0.5.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ soapy-remote.spec ++++++ --- /var/tmp/diff_new_pack.ivcCTT/_old 2021-03-24 16:17:54.660251207 +0100 +++ /var/tmp/diff_new_pack.ivcCTT/_new 2021-03-24 16:17:54.664251212 +0100 @@ -1,7 +1,7 @@ # # spec file for package soapy-remote # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC. # Copyright (c) 2017, Martin Hauke <mar...@gmx.de> # # All modifications and additions to the file contributed by third parties @@ -21,7 +21,7 @@ %define soapy_modname soapysdr%{soapy_modver}-module-remote Name: soapy-remote -Version: 0.5.1 +Version: 0.5.2 Release: 0 Summary: Remote device support for Soapy SDR License: BSL-1.0 ++++++ soapy-remote-0.5.1.tar.gz -> soapy-remote-0.5.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/Changelog.txt new/SoapyRemote-soapy-remote-0.5.2/Changelog.txt --- old/SoapyRemote-soapy-remote-0.5.1/Changelog.txt 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/Changelog.txt 2020-07-20 22:03:41.000000000 +0200 @@ -1,3 +1,12 @@ +Release 0.5.2 (2020-07-20) +========================== + +- Support more than 31 clients in SSDP endpoint +- Handle cases where avahi client is null +- Handle EINTR case for SSDP server select +- Fix the scale in CS12 - CF32 conversion +- Protect getServerURLs from re-entrant calls + Release 0.5.1 (2019-01-26) ========================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/client/ClientStreamData.cpp new/SoapyRemote-soapy-remote-0.5.2/client/ClientStreamData.cpp --- old/SoapyRemote-soapy-remote-0.5.1/client/ClientStreamData.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/client/ClientStreamData.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -60,7 +60,8 @@ case CONVERT_CF32_CS12: /////////////////////////// { - const float scale = float(1.0/scaleFactor); + // note that we correct the scale for the CS16 intermediate step + const float scale = float(1.0/16.0/scaleFactor); for (size_t i = 0; i < recvBuffs.size(); i++) { auto in = (uint8_t *)recvBuffs[i]; @@ -193,7 +194,8 @@ case CONVERT_CF32_CS12: /////////////////////////// { - const float scale = float(scaleFactor); + // note that we correct the scale for the CS16 intermediate step + const float scale = float(16.0*scaleFactor); for (size_t i = 0; i < sendBuffs.size(); i++) { auto in = (float *)buffs[i]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/client/DiscoverServers.cpp new/SoapyRemote-soapy-remote-0.5.2/client/DiscoverServers.cpp --- old/SoapyRemote-soapy-remote-0.5.1/client/DiscoverServers.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/client/DiscoverServers.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2018-2018 Josh Blum +// Copyright (c) 2018-2020 Josh Blum // SPDX-License-Identifier: BSL-1.0 #include "SoapyClient.hpp" @@ -7,10 +7,14 @@ #include "SoapyRemoteDefs.hpp" #include <memory> #include <future> +#include <mutex> #include <set> std::vector<std::string> SoapyRemoteDevice::getServerURLs(const int ipVer, const long timeoutUs) { + static std::mutex mutex; + std::lock_guard<std::mutex> lock(mutex); + //connect to DNS-SD daemon and maintain a global connection //logic will reconnect if the status has failed for some reason static std::unique_ptr<SoapyMDNSEndpoint> mdnsEndpoint(new SoapyMDNSEndpoint()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/client/Streaming.cpp new/SoapyRemote-soapy-remote-0.5.2/client/Streaming.cpp --- old/SoapyRemote-soapy-remote-0.5.1/client/Streaming.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/client/Streaming.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -188,7 +188,7 @@ //use the native scale factor when the remote format is native, //otherwise the default scale factor is the max signed integer double scaleFactor = (remoteFormat == nativeFormat)?nativeScaleFactor:double(1 << ((SoapySDR::formatToSize(remoteFormat)*4)-1)); - const auto scaleFactorIt = args.find(SOAPY_REMOTE_KWARG_SCALAR); + const auto scaleFactorIt = args.find(SOAPY_REMOTE_KWARG_SCALE); if (scaleFactorIt != args.end()) scaleFactor = std::stod(scaleFactorIt->second); //determine reliable stream mode with tcp or datagram mode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/common/SoapyMDNSEndpointAvahi.cpp new/SoapyRemote-soapy-remote-0.5.2/common/SoapyMDNSEndpointAvahi.cpp --- old/SoapyRemote-soapy-remote-0.5.1/common/SoapyMDNSEndpointAvahi.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/common/SoapyMDNSEndpointAvahi.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -171,6 +171,7 @@ void SoapyMDNSEndpoint::printInfo(void) { //summary of avahi client connection for server logging + if (_impl->client == nullptr) return; SoapySDR::logf(SOAPY_SDR_INFO, "Avahi version: %s", avahi_client_get_version_string(_impl->client)); SoapySDR::logf(SOAPY_SDR_INFO, "Avahi hostname: %s", avahi_client_get_host_name(_impl->client)); SoapySDR::logf(SOAPY_SDR_INFO, "Avahi domain: %s", avahi_client_get_domain_name(_impl->client)); @@ -179,11 +180,13 @@ bool SoapyMDNSEndpoint::status(void) { + if (_impl->client == nullptr) return false; return avahi_client_get_state(_impl->client) != AVAHI_CLIENT_FAILURE; } void SoapyMDNSEndpoint::registerService(const std::string &uuid, const std::string &service, const int ipVer) { + if (_impl->client == nullptr) return; auto &client = _impl->client; auto &group = _impl->group; group = avahi_entry_group_new(client, &groupCallback, this); @@ -372,6 +375,8 @@ std::map<std::string, std::map<int, std::string>> SoapyMDNSEndpoint::getServerURLs(const int ipVerReq, const long timeoutUs) { + if (_impl->client == nullptr) return {}; + const auto exitTime = std::chrono::high_resolution_clock::now() + std::chrono::microseconds(timeoutUs); std::lock_guard<std::recursive_mutex> l(_impl->mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRPCSocket.cpp new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.cpp --- old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRPCSocket.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2019 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // SPDX-License-Identifier: BSL-1.0 #include "SoapySocketDefs.hpp" @@ -477,7 +477,7 @@ return ret == 1; } -int SoapyRPCSocket::selectRecvMultiple(const std::vector<SoapyRPCSocket *> &socks, const long timeoutUs) +int SoapyRPCSocket::selectRecvMultiple(const std::vector<SoapyRPCSocket *> &socks, std::vector<bool> &ready, const long timeoutUs) { struct timeval tv; tv.tv_sec = timeoutUs / 1000000; @@ -496,12 +496,13 @@ int ret = ::select(maxSock+1, &readfds, NULL, NULL, &tv); if (ret == -1) return ret; - int mask = 0; + int count = 0; for (size_t i = 0; i < socks.size(); i++) { - if (FD_ISSET(socks[i]->_sock, &readfds)) mask |= (1 << i); + ready[i] = FD_ISSET(socks[i]->_sock, &readfds); + if (ready[i]) count++; } - return mask; + return count; } static std::string errToString(const int err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRPCSocket.hpp new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.hpp --- old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRPCSocket.hpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.hpp 2020-07-20 22:03:41.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2018 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // SPDX-License-Identifier: BSL-1.0 #pragma once @@ -133,9 +133,10 @@ /*! * Wait for recv ready on multiple sockets. - * Return a mask of sockets that are ready or -1 for error + * Set the output ready vector to true for ready or false + * Return a count of sockets that are ready or -1 for error */ - static int selectRecvMultiple(const std::vector<SoapyRPCSocket *> &socks, const long timeoutUs); + static int selectRecvMultiple(const std::vector<SoapyRPCSocket *> &socks, std::vector<bool> &ready, const long timeoutUs); /*! * Query the last error message as a string. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRemoteDefs.hpp new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRemoteDefs.hpp --- old/SoapyRemote-soapy-remote-0.5.1/common/SoapyRemoteDefs.hpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/common/SoapyRemoteDefs.hpp 2020-07-20 22:03:41.000000000 +0200 @@ -17,8 +17,8 @@ //! Stream args key to set the format on the remote server #define SOAPY_REMOTE_KWARG_FORMAT (SOAPY_REMOTE_KWARG_PREFIX "format") -//! Stream args key to set the scalar for local float conversions -#define SOAPY_REMOTE_KWARG_SCALAR (SOAPY_REMOTE_KWARG_PREFIX "scalar") +//! Stream args key to set the scale for local float conversions +#define SOAPY_REMOTE_KWARG_SCALE (SOAPY_REMOTE_KWARG_PREFIX "scale") //! Stream args key to set the buffer MTU bytes for network transfers #define SOAPY_REMOTE_KWARG_MTU (SOAPY_REMOTE_KWARG_PREFIX "mtu") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/common/SoapySSDPEndpoint.cpp new/SoapyRemote-soapy-remote-0.5.2/common/SoapySSDPEndpoint.cpp --- old/SoapyRemote-soapy-remote-0.5.1/common/SoapySSDPEndpoint.cpp 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/common/SoapySSDPEndpoint.cpp 2020-07-20 22:03:41.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2018 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // SPDX-License-Identifier: BSL-1.0 /* @@ -22,6 +22,7 @@ #include <mutex> #include <thread> #include <ctime> +#include <cerrno> #include <chrono> #include <cctype> #include <map> @@ -251,10 +252,12 @@ //vector of sockets for select operation std::vector<SoapyRPCSocket *> socks; for (auto &data : _impl->handlers) socks.push_back(&data->sock); + std::vector<bool> ready(socks.size()); while (not _impl->done) { - const int socksReady = SoapyRPCSocket::selectRecvMultiple(socks, SOAPY_REMOTE_SOCKET_TIMEOUT_US); + const int socksReady = SoapyRPCSocket::selectRecvMultiple(socks, ready, SOAPY_REMOTE_SOCKET_TIMEOUT_US); + if (socksReady == -1 and errno == EINTR) continue; //continue after interrupted system call if (socksReady < 0) { SoapySDR::logf(SOAPY_SDR_ERROR, "SoapySSDPEndpoint::selectRecvMultiple() = %d", socksReady); @@ -266,7 +269,7 @@ for (size_t i = 0; i < _impl->handlers.size(); i++) { - if ((socksReady & (1 << i)) == 0) continue; + if (not ready[i]) continue; auto data = _impl->handlers[i]; auto &sock = data->sock; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/debian/changelog new/SoapyRemote-soapy-remote-0.5.2/debian/changelog --- old/SoapyRemote-soapy-remote-0.5.1/debian/changelog 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/debian/changelog 2020-07-20 22:03:41.000000000 +0200 @@ -1,3 +1,9 @@ +soapyremote (0.5.2-1) unstable; urgency=low + + * Release 0.5.2 (2020-07-20) + + -- Josh Blum <j...@pothosware.com> Mon, 20 Jul 2020 15:03:37 -0000 + soapyremote (0.5.1-1) unstable; urgency=low * Release 0.5.1 (2019-01-26) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/debian/copyright new/SoapyRemote-soapy-remote-0.5.2/debian/copyright --- old/SoapyRemote-soapy-remote-0.5.1/debian/copyright 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/debian/copyright 2020-07-20 22:03:41.000000000 +0200 @@ -4,7 +4,7 @@ Files: * Copyright: - Copyright (c) 2015-2019 Josh Blum <j...@pothosware.com> + Copyright (c) 2015-2020 Josh Blum <j...@pothosware.com> Copyright (c) 2016-2016 Bastille Networks License: BSL-1.0 Boost Software License - Version 1.0 - August 17th, 2003 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.1/debian/soapysdr-server.postinst new/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.postinst --- old/SoapyRemote-soapy-remote-0.5.1/debian/soapysdr-server.postinst 2019-01-26 19:21:42.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.postinst 2020-07-20 22:03:41.000000000 +0200 @@ -5,7 +5,7 @@ #Load the new sysctl limits so they are immediately usable. #Otherwise, the limits will be always loaded at boot time. if [ -x "`which sysctl 2>/dev/null`" ]; then - sysctl --load /usr/lib/sysctl.d/SoapySDRServer.conf + sysctl --load /usr/lib/sysctl.d/SoapySDRServer.conf || true fi fi