From 7b150ec834492059c825ebe937dddc20c2c73895 Mon Sep 17 00:00:00 2001 From: Jari Sundell Date: Fri, 25 Nov 2011 02:21:44 +0900 Subject: [PATCH] Made d.multicall safe for deletion of downloads. --- src/command_events.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/command_events.cc b/src/command_events.cc index 7a9bb00c..08a6be7d 100644 --- a/src/command_events.cc +++ b/src/command_events.cc @@ -286,10 +286,15 @@ d_multicall(const torrent::Object::list_type& args) { // Add some pre-parsing of the commands, so we don't spend time // parsing and searching command map for every single call. + unsigned int dlist_size = (*viewItr)->size_visible(); + core::Download* dlist[dlist_size]; + + std::copy((*viewItr)->begin_visible(), (*viewItr)->end_visible(), dlist); + torrent::Object resultRaw = torrent::Object::create_list(); torrent::Object::list_type& result = resultRaw.as_list(); - for (core::View::const_iterator vItr = (*viewItr)->begin_visible(), vLast = (*viewItr)->end_visible(); vItr != vLast; vItr++) { + for (core::Download** vItr = dlist; vItr != dlist + dlist_size; vItr++) { torrent::Object::list_type& row = result.insert(result.end(), torrent::Object::create_list())->as_list(); for (torrent::Object::list_const_iterator cItr = ++args.begin(), cLast = args.end(); cItr != args.end(); cItr++) {