On 9 February 2012 10:36, Christiano F. Haesbaert
<haesba...@haesbaert.org> wrote:
> On 26 January 2012 14:39, David Coppa <dco...@openbsd.org> wrote:
>>
>> Hi,
>>
>> Just noticed that rtorrent is broken on sparc64.
>>
>> This is a working fix I've cooked up, but I'd like to have some
>> help since I am a total n00b in C++
>>
>
> I'm running this diff with no problems so far on a sparc64.
>

Nah, it's still broken, I moved some .torrent into my watch folder and
it crashed, now it crashes at startup after a while, probably while
trying to process the new torrent files:

rtorrent: PollKQueue::modify() error: No such file or

My C++ is 100% non-existant but I'll give it a look.

>> Index: Makefile
>> ===================================================================
>> RCS file: /cvs/ports/net/rtorrent/Makefile,v
>> retrieving revision 1.30
>> diff -u -p -r1.30 Makefile
>> --- Makefile    1 Dec 2011 17:10:40 -0000       1.30
>> +++ Makefile    26 Jan 2012 16:31:27 -0000
>> @@ -3,6 +3,7 @@
>>  COMMENT=               ncurses BitTorrent client based on libTorrent
>>
>>  DISTNAME=              rtorrent-0.8.9
>> +REVISION=              0
>>  CATEGORIES=            net
>>
>>  HOMEPAGE=              http://libtorrent.rakshasa.no/
>> Index: patches/patch-src_command_local_cc
>> ===================================================================
>> RCS file: patches/patch-src_command_local_cc
>> diff -N patches/patch-src_command_local_cc
>> --- /dev/null   1 Jan 1970 00:00:00 -0000
>> +++ patches/patch-src_command_local_cc  26 Jan 2012 16:31:27 -0000
>> @@ -0,0 +1,25 @@
>> +$OpenBSD$
>> +
>> +Fix unaligned access causing a SIGBUS at startup on sparc64
>> +
>> +--- src/command_local.cc.orig  Tue Jun 14 04:57:10 2011
>> ++++ src/command_local.cc       Thu Jan 26 16:55:38 2012
>> +@@ -398,10 +398,14 @@ initialize_command_local() {
>> +   CMD2_ANY_LIST    ("file.append",    std::bind(&cmd_file_append, 
>> std::placeholders::_2));
>> +
>> +   // TODO: Convert to new command types:
>> +-  *rpc::command_base::argument(0) = "placeholder.0";
>> +-  *rpc::command_base::argument(1) = "placeholder.1";
>> +-  *rpc::command_base::argument(2) = "placeholder.2";
>> +-  *rpc::command_base::argument(3) = "placeholder.3";
>> ++  std::string ph0 = "placeholder.0";
>> ++  std::string ph1 = "placeholder.1";
>> ++  std::string ph2 = "placeholder.2";
>> ++  std::string ph3 = "placeholder.3";
>> ++  std::memcpy(rpc::command_base::argument(0), ph0.c_str(), 
>> sizeof(torrent::Object*));
>> ++  std::memcpy(rpc::command_base::argument(1), ph1.c_str(), 
>> sizeof(torrent::Object*));
>> ++  std::memcpy(rpc::command_base::argument(2), ph2.c_str(), 
>> sizeof(torrent::Object*));
>> ++  std::memcpy(rpc::command_base::argument(3), ph3.c_str(), 
>> sizeof(torrent::Object*));
>> +   CMD2_ANY_P("argument.0", std::bind(&rpc::command_base::argument_ref, 0));
>> +   CMD2_ANY_P("argument.1", std::bind(&rpc::command_base::argument_ref, 1));
>> +   CMD2_ANY_P("argument.2", std::bind(&rpc::command_base::argument_ref, 2));
>>

Reply via email to