refactor: remove tr_free() (#3668)
This commit is contained in:
parent
963a8112a1
commit
76a7994eef
|
@ -811,7 +811,6 @@ static int daemon_start(void* varg, [[maybe_unused]] bool foreground)
|
||||||
|
|
||||||
/* load the torrents */
|
/* load the torrents */
|
||||||
{
|
{
|
||||||
tr_torrent** torrents;
|
|
||||||
tr_ctor* ctor = tr_ctorNew(mySession);
|
tr_ctor* ctor = tr_ctorNew(mySession);
|
||||||
|
|
||||||
if (arg->paused)
|
if (arg->paused)
|
||||||
|
@ -819,8 +818,7 @@ static int daemon_start(void* varg, [[maybe_unused]] bool foreground)
|
||||||
tr_ctorSetPaused(ctor, TR_FORCE, true);
|
tr_ctorSetPaused(ctor, TR_FORCE, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
torrents = tr_sessionLoadTorrents(mySession, ctor, nullptr);
|
tr_sessionLoadTorrents(mySession, ctor);
|
||||||
tr_free(torrents);
|
|
||||||
tr_ctorFree(ctor);
|
tr_ctorFree(ctor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <libtransmission/rpcimpl.h>
|
#include <libtransmission/rpcimpl.h>
|
||||||
#include <libtransmission/torrent-metainfo.h>
|
#include <libtransmission/torrent-metainfo.h>
|
||||||
#include <libtransmission/tr-assert.h>
|
#include <libtransmission/tr-assert.h>
|
||||||
#include <libtransmission/utils.h> // tr_free(), tr_time()
|
#include <libtransmission/utils.h> // tr_time()
|
||||||
#include <libtransmission/web-utils.h> // tr_urlIsValid()
|
#include <libtransmission/web-utils.h> // tr_urlIsValid()
|
||||||
#include <libtransmission/variant.h>
|
#include <libtransmission/variant.h>
|
||||||
|
|
||||||
|
@ -1269,32 +1269,30 @@ void Session::remove_torrent(tr_torrent_id_t id, bool delete_local_data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::load(bool forcePaused)
|
void Session::load(bool force_paused)
|
||||||
{
|
{
|
||||||
tr_ctor* ctor;
|
auto* const ctor = tr_ctorNew(impl_->get_session());
|
||||||
tr_torrent** torrents;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
ctor = tr_ctorNew(impl_->get_session());
|
if (force_paused)
|
||||||
|
|
||||||
if (forcePaused)
|
|
||||||
{
|
{
|
||||||
tr_ctorSetPaused(ctor, TR_FORCE, true);
|
tr_ctorSetPaused(ctor, TR_FORCE, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr_ctorSetPeerLimit(ctor, TR_FALLBACK, gtr_pref_int_get(TR_KEY_peer_limit_per_torrent));
|
tr_ctorSetPeerLimit(ctor, TR_FALLBACK, gtr_pref_int_get(TR_KEY_peer_limit_per_torrent));
|
||||||
|
|
||||||
torrents = tr_sessionLoadTorrents(impl_->get_session(), ctor, &count);
|
auto* session = impl_->get_session();
|
||||||
|
auto const n_torrents = tr_sessionLoadTorrents(session, ctor);
|
||||||
|
tr_ctorFree(ctor);
|
||||||
|
|
||||||
ScopedModelSortBlocker disable_sort(*gtr_get_ptr(impl_->get_model()));
|
ScopedModelSortBlocker disable_sort(*gtr_get_ptr(impl_->get_model()));
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i)
|
auto torrents = std::vector<tr_torrent*>{};
|
||||||
|
torrents.resize(n_torrents);
|
||||||
|
tr_sessionGetAllTorrents(session, std::data(torrents), std::size(torrents));
|
||||||
|
for (auto* tor : torrents)
|
||||||
{
|
{
|
||||||
impl_->add_torrent(torrents[i], false);
|
impl_->add_torrent(tor, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr_free(torrents);
|
|
||||||
tr_ctorFree(ctor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::clear()
|
void Session::clear()
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// or any future license endorsed by Mnemosyne LLC.
|
// or any future license endorsed by Mnemosyne LLC.
|
||||||
// License text can be found in the licenses/ folder.
|
// License text can be found in the licenses/ folder.
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cstdlib> // std::lldiv()
|
#include <cstdlib> // std::lldiv()
|
||||||
#include <iterator> // std::distance(), std::next(), std::prev()
|
#include <iterator> // std::distance(), std::next(), std::prev()
|
||||||
#include <limits> // std::numeric_limits<size_t>::max()
|
#include <limits> // std::numeric_limits<size_t>::max()
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// or any future license endorsed by Mnemosyne LLC.
|
// or any future license endorsed by Mnemosyne LLC.
|
||||||
// License text can be found in the licenses/ folder.
|
// License text can be found in the licenses/ folder.
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// or any future license endorsed by Mnemosyne LLC.
|
// or any future license endorsed by Mnemosyne LLC.
|
||||||
// License text can be found in the licenses/ folder.
|
// License text can be found in the licenses/ folder.
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cerrno> // for ENOENT
|
#include <cerrno> // for ENOENT
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
|
@ -1891,8 +1891,6 @@ struct sessionLoadTorrentsData
|
||||||
{
|
{
|
||||||
tr_session* session;
|
tr_session* session;
|
||||||
tr_ctor* ctor;
|
tr_ctor* ctor;
|
||||||
int* setmeCount;
|
|
||||||
tr_torrent** torrents;
|
|
||||||
bool done;
|
bool done;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1935,41 +1933,41 @@ static void sessionLoadTorrents(struct sessionLoadTorrentsData* const data)
|
||||||
tr_sys_dir_close(odir);
|
tr_sys_dir_close(odir);
|
||||||
}
|
}
|
||||||
|
|
||||||
int const n = std::size(torrents);
|
if (auto const n = std::size(torrents); n != 0U)
|
||||||
data->torrents = tr_new(tr_torrent*, n); // NOLINT(bugprone-sizeof-expression)
|
|
||||||
std::copy(std::begin(torrents), std::end(torrents), data->torrents);
|
|
||||||
|
|
||||||
if (n != 0)
|
|
||||||
{
|
{
|
||||||
tr_logAddInfo(fmt::format(ngettext("Loaded {count} torrent", "Loaded {count} torrents", n), fmt::arg("count", n)));
|
tr_logAddInfo(fmt::format(ngettext("Loaded {count} torrent", "Loaded {count} torrents", n), fmt::arg("count", n)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->setmeCount != nullptr)
|
|
||||||
{
|
|
||||||
*data->setmeCount = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
data->done = true;
|
data->done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr_torrent** tr_sessionLoadTorrents(tr_session* session, tr_ctor* ctor, int* setmeCount)
|
size_t tr_sessionLoadTorrents(tr_session* session, tr_ctor* ctor)
|
||||||
{
|
{
|
||||||
struct sessionLoadTorrentsData data;
|
struct sessionLoadTorrentsData data;
|
||||||
|
|
||||||
data.session = session;
|
data.session = session;
|
||||||
data.ctor = ctor;
|
data.ctor = ctor;
|
||||||
data.setmeCount = setmeCount;
|
|
||||||
data.torrents = nullptr;
|
|
||||||
data.done = false;
|
data.done = false;
|
||||||
|
|
||||||
tr_runInEventThread(session, sessionLoadTorrents, &data);
|
tr_runInEventThread(session, sessionLoadTorrents, &data);
|
||||||
|
|
||||||
while (!data.done)
|
while (!data.done)
|
||||||
{
|
{
|
||||||
tr_wait_msec(100);
|
tr_wait_msec(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data.torrents;
|
return std::size(session->torrents());
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t tr_sessionGetAllTorrents(tr_session* session, tr_torrent** buf, size_t buflen)
|
||||||
|
{
|
||||||
|
auto& torrents = session->torrents();
|
||||||
|
auto const n = std::size(torrents);
|
||||||
|
|
||||||
|
if (buflen >= n)
|
||||||
|
{
|
||||||
|
std::copy_n(std::begin(torrents), n, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|
|
@ -12,10 +12,6 @@
|
||||||
****
|
****
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#ifndef __has_attribute
|
|
||||||
#define __has_attribute(x) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __has_builtin
|
#ifndef __has_builtin
|
||||||
#define __has_builtin(x) 0
|
#define __has_builtin(x) 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -62,16 +58,6 @@
|
||||||
****
|
****
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#if __has_attribute(__malloc__) || TR_GNUC_CHECK_VERSION(2, 96)
|
|
||||||
#define TR_GNUC_MALLOC __attribute__((__malloc__))
|
|
||||||
#else
|
|
||||||
#define TR_GNUC_MALLOC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/***
|
|
||||||
****
|
|
||||||
***/
|
|
||||||
|
|
||||||
#define TR_PATH_DELIMITER '/'
|
#define TR_PATH_DELIMITER '/'
|
||||||
#define TR_PATH_DELIMITER_STR "/"
|
#define TR_PATH_DELIMITER_STR "/"
|
||||||
|
|
||||||
|
|
|
@ -710,11 +710,23 @@ void tr_sessionSetQueueStartCallback(tr_session*, void (*callback)(tr_session*,
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load all the torrents in the session's torrent folder.
|
* Load all the torrents in the session's torrent folder.
|
||||||
* This can be used at startup to kickstart all the torrents
|
* This can be used at startup to kickstart all the torrents
|
||||||
* from the previous session.
|
* from the previous session.
|
||||||
|
*
|
||||||
|
* @return the number of torrents in the session
|
||||||
*/
|
*/
|
||||||
tr_torrent** tr_sessionLoadTorrents(tr_session* session, tr_ctor* ctor, int* setmeCount);
|
size_t tr_sessionLoadTorrents(tr_session* session, tr_ctor* ctor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get pointers to all the torrents in a session.
|
||||||
|
*
|
||||||
|
* Iff `buflen` is large enough to hold the torrents pointers,
|
||||||
|
* then all of them are copied into `buf`.
|
||||||
|
*
|
||||||
|
* @return the number of torrents in the session
|
||||||
|
*/
|
||||||
|
size_t tr_sessionGetAllTorrents(tr_session* session, tr_torrent** buf, size_t buflen);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
***
|
***
|
||||||
|
|
|
@ -60,28 +60,6 @@ using namespace std::literals;
|
||||||
|
|
||||||
time_t __tr_current_time = 0;
|
time_t __tr_current_time = 0;
|
||||||
|
|
||||||
/***
|
|
||||||
****
|
|
||||||
***/
|
|
||||||
|
|
||||||
void* tr_malloc(size_t size)
|
|
||||||
{
|
|
||||||
return size != 0 ? malloc(size) : nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* tr_malloc0(size_t size)
|
|
||||||
{
|
|
||||||
return size != 0 ? calloc(1, size) : nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tr_free(void* p)
|
|
||||||
{
|
|
||||||
if (p != nullptr)
|
|
||||||
{
|
|
||||||
free(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
***
|
***
|
||||||
**/
|
**/
|
||||||
|
|
|
@ -122,17 +122,6 @@ int tr_main_win32(int argc, char** argv, int (*real_main)(int, char**));
|
||||||
****
|
****
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/** @brief Portability wrapper around malloc() in which `0' is a safe argument */
|
|
||||||
void* tr_malloc(size_t size);
|
|
||||||
|
|
||||||
/** @brief Portability wrapper around calloc() in which `0' is a safe argument */
|
|
||||||
void* tr_malloc0(size_t size);
|
|
||||||
|
|
||||||
/** @brief Portability wrapper around free() in which `nullptr' is a safe argument */
|
|
||||||
void tr_free(void* p);
|
|
||||||
|
|
||||||
#define tr_new(struct_type, n_structs) (static_cast<struct_type*>(tr_malloc(sizeof(struct_type) * (size_t)(n_structs))))
|
|
||||||
|
|
||||||
constexpr bool tr_str_is_empty(char const* value)
|
constexpr bool tr_str_is_empty(char const* value)
|
||||||
{
|
{
|
||||||
return value == nullptr || *value == '\0';
|
return value == nullptr || *value == '\0';
|
||||||
|
@ -228,15 +217,6 @@ constexpr bool tr_strvSep(std::string_view* sv, std::string_view* token, char de
|
||||||
*/
|
*/
|
||||||
size_t tr_strvToBuf(std::string_view src, char* buf, size_t buflen);
|
size_t tr_strvToBuf(std::string_view src, char* buf, size_t buflen);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief copies `src` into `buf`.
|
|
||||||
*
|
|
||||||
* - Always returns std::size(src).
|
|
||||||
* - `src` will be copied into `buf` iff `buflen >= std::size(src)`
|
|
||||||
* - `buf` will also be zero terminated iff `buflen >= std::size(src) + 1`.
|
|
||||||
*/
|
|
||||||
size_t tr_strvToBuf(std::string_view src, char* buf, size_t buflen);
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
****
|
****
|
||||||
***/
|
***/
|
||||||
|
|
|
@ -708,14 +708,15 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
|
||||||
//load previous transfers
|
//load previous transfers
|
||||||
tr_ctor* ctor = tr_ctorNew(session);
|
tr_ctor* ctor = tr_ctorNew(session);
|
||||||
tr_ctorSetPaused(ctor, TR_FORCE, true); // paused by default; unpause below after checking state history
|
tr_ctorSetPaused(ctor, TR_FORCE, true); // paused by default; unpause below after checking state history
|
||||||
int n_torrents = 0;
|
auto const n_torrents = tr_sessionLoadTorrents(session, ctor);
|
||||||
tr_torrent** loaded_torrents = tr_sessionLoadTorrents(session, ctor, &n_torrents);
|
|
||||||
tr_ctorFree(ctor);
|
tr_ctorFree(ctor);
|
||||||
|
|
||||||
// process the loaded torrents
|
// process the loaded torrents
|
||||||
for (int i = 0; i < n_torrents; ++i)
|
auto torrents = std::vector<tr_torrent*>{};
|
||||||
|
torrents.resize(n_torrents);
|
||||||
|
tr_sessionGetAllTorrents(session, std::data(torrents), std::size(torrents));
|
||||||
|
for (auto* tor : torrents)
|
||||||
{
|
{
|
||||||
struct tr_torrent* tor = loaded_torrents[i];
|
|
||||||
NSString* location;
|
NSString* location;
|
||||||
if (tr_torrentGetDownloadDir(tor) != NULL)
|
if (tr_torrentGetDownloadDir(tor) != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <libtransmission/transmission.h>
|
#include <libtransmission/transmission.h>
|
||||||
|
|
||||||
#include <libtransmission/session-id.h>
|
#include <libtransmission/session-id.h>
|
||||||
#include <libtransmission/utils.h> // tr_free
|
#include <libtransmission/utils.h>
|
||||||
#include <libtransmission/variant.h>
|
#include <libtransmission/variant.h>
|
||||||
|
|
||||||
#include "Session.h"
|
#include "Session.h"
|
||||||
|
@ -357,7 +357,7 @@ void Session::start()
|
||||||
rpc_.start(session_);
|
rpc_.start(session_);
|
||||||
|
|
||||||
auto* const ctor = tr_ctorNew(session_);
|
auto* const ctor = tr_ctorNew(session_);
|
||||||
tr_free(tr_sessionLoadTorrents(session_, ctor, nullptr));
|
tr_sessionLoadTorrents(session_, ctor);
|
||||||
tr_ctorFree(ctor);
|
tr_ctorFree(ctor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue