fixed move_stororage to handle the case where it fails
This commit is contained in:
parent
136f101449
commit
92f42eb23c
|
@ -44,6 +44,8 @@ release 0.14.4
|
||||||
(should mean a slight performance improvement)
|
(should mean a slight performance improvement)
|
||||||
* fixed a bug where a failed rename_file() would leave the storage
|
* fixed a bug where a failed rename_file() would leave the storage
|
||||||
in an error state which would pause the torrent
|
in an error state which would pause the torrent
|
||||||
|
* fixed case when move_storage() would fail. Added a new alert
|
||||||
|
to be posted when it does
|
||||||
|
|
||||||
release 0.14.3
|
release 0.14.3
|
||||||
|
|
||||||
|
|
|
@ -2002,7 +2002,8 @@ drop while copying the file.
|
||||||
|
|
||||||
Since disk IO is performed in a separate thread, this operation is also asynchronous.
|
Since disk IO is performed in a separate thread, this operation is also asynchronous.
|
||||||
Once the operation completes, the ``storage_moved_alert`` is generated, with the new
|
Once the operation completes, the ``storage_moved_alert`` is generated, with the new
|
||||||
path as the message.
|
path as the message. If the move fails for some reason, ``storage_moved_failed_alert``
|
||||||
|
is generated instead, containing the error message.
|
||||||
|
|
||||||
rename_file()
|
rename_file()
|
||||||
-------------
|
-------------
|
||||||
|
@ -4974,6 +4975,21 @@ the storage.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
storage_moved_failed_alert
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
The ``storage_moved_failed_alert`` is generated when an attempt to move the storage
|
||||||
|
(via torrent_handle::move_storage()) fails.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
struct storage_moved_failed_alert: torrent_alert
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
error_code error;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
torrent_paused_alert
|
torrent_paused_alert
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|
|
@ -773,6 +773,27 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct TORRENT_EXPORT storage_moved_failed_alert: torrent_alert
|
||||||
|
{
|
||||||
|
storage_moved_failed_alert(torrent_handle const& h, error_code const& ec_)
|
||||||
|
: torrent_alert(h)
|
||||||
|
, error(ec_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
error_code error;
|
||||||
|
|
||||||
|
virtual std::auto_ptr<alert> clone() const
|
||||||
|
{ return std::auto_ptr<alert>(new storage_moved_failed_alert(*this)); }
|
||||||
|
virtual char const* what() const { return "storage moved failed"; }
|
||||||
|
const static int static_category = alert::storage_notification;
|
||||||
|
virtual int category() const { return static_category; }
|
||||||
|
virtual std::string message() const
|
||||||
|
{
|
||||||
|
return torrent_alert::message() + " storage move failed: "
|
||||||
|
+ error.message();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct TORRENT_EXPORT torrent_deleted_alert: torrent_alert
|
struct TORRENT_EXPORT torrent_deleted_alert: torrent_alert
|
||||||
{
|
{
|
||||||
torrent_deleted_alert(torrent_handle const& h)
|
torrent_deleted_alert(torrent_handle const& h)
|
||||||
|
|
|
@ -4123,6 +4123,10 @@ namespace libtorrent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_save_path = save_path;
|
m_save_path = save_path;
|
||||||
|
if (alerts().should_post<storage_moved_alert>())
|
||||||
|
{
|
||||||
|
alerts().post_alert(storage_moved_alert(get_handle(), m_save_path.string()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4130,11 +4134,21 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
|
||||||
if (alerts().should_post<storage_moved_alert>())
|
if (ret == 0)
|
||||||
{
|
{
|
||||||
alerts().post_alert(storage_moved_alert(get_handle(), j.str));
|
if (alerts().should_post<storage_moved_alert>())
|
||||||
|
{
|
||||||
|
alerts().post_alert(storage_moved_alert(get_handle(), j.str));
|
||||||
|
}
|
||||||
|
m_save_path = j.str;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (alerts().should_post<storage_moved_failed_alert>())
|
||||||
|
{
|
||||||
|
alerts().post_alert(storage_moved_failed_alert(get_handle(), j.error));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_save_path = j.str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
piece_manager& torrent::filesystem()
|
piece_manager& torrent::filesystem()
|
||||||
|
|
Loading…
Reference in New Issue