diff --git a/libtransmission/torrent-magnet.c b/libtransmission/torrent-magnet.c index 090b4cf2c..4ebb1b6b3 100644 --- a/libtransmission/torrent-magnet.c +++ b/libtransmission/torrent-magnet.c @@ -344,7 +344,7 @@ void tr_torrentSetMetadataPiece(tr_torrent* tor, int piece, void const* data, in tor->incompleteMetadata = NULL; tor->isStopping = true; tor->magnetVerify = true; - tor->startAfterVerify = true; + tor->startAfterVerify = !tor->prefetchMagnetMetadata; tr_torrentMarkEdited(tor); } else /* drat. */ diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index f10475bdd..ea8c5d372 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -1020,8 +1020,16 @@ static void torrentInit(tr_torrent* tor, tr_ctor const* ctor) if (isNewTorrent) { - tor->startAfterVerify = doStart; - tr_torrentVerify(tor, NULL, NULL); + if (!tr_torrentHasMetadata(tor) && !doStart) + { + tor->prefetchMagnetMetadata = true; + tr_torrentStartNow(tor); + } + else + { + tor->startAfterVerify = doStart; + tr_torrentVerify(tor, NULL, NULL); + } } else if (doStart) { @@ -2025,6 +2033,7 @@ void tr_torrentStop(tr_torrent* tor) tor->isRunning = false; tor->isStopping = false; + tor->prefetchMagnetMetadata = false; tr_torrentSetDirty(tor); tr_runInEventThread(tor->session, stopTorrent, tor); diff --git a/libtransmission/torrent.h b/libtransmission/torrent.h index bca6018d7..166a55c0d 100644 --- a/libtransmission/torrent.h +++ b/libtransmission/torrent.h @@ -241,6 +241,7 @@ struct tr_torrent bool isDirty; bool isQueued; + bool prefetchMagnetMetadata; bool magnetVerify; bool infoDictOffsetIsCached;