I confirmed that ParseString has this problem, and uploaded the fixed util.cpp to SVN. string::npos == -1 Comparing unsigned int -1 (0xffffffff) with long unsigned int -1 (0xffffffffffffffff) results in the unsigned int being promoted to 64-bit, which is 0x00000000ffffffff != 0xffffffffffffffff. mmalmi@cc.hut.fi wrote: > Here's another test run debug.log I got when debugging with gdb. The > program started eating memory after the debug line "irc 8" and within a > few seconds crashed with "terminate called after throwing an instance of > 'std::bad_alloc'". > >> It's in RecvUntil, but I still can't see anything wrong with it. The >> only thing I can think of is if the socket is receiving a spew of >> characters. >> >> Try this irc.cpp. debug.log may grow rapidly so be ready to kill it. >> >> mmalmi@cc.hut.fi wrote: >>> debug.log attached >>> >>>> That narrows it down a lot. It didn't print any IRC activity in >>>> debug.log, so I guess it couldn't have gotten past the RecvUntil. >>>> Eyeballing it I don't see anything obvious. I guess it would have to >>>> be either in ConnectSocket or RecvUntil. >>>> >>>> Try it with the attached irc.cpp and net.cpp and send me the debug.log. >>>> >>>> Or you could run it in gdb and step through ThreadIRCSeed >>>> gdb --args bitcoin [switches] >>>> b ThreadIRCSeed >>>> run >>>> step >>>> or u to step over and up out of routines. >>>> >>>> mmalmi@cc.hut.fi wrote: >>>>> I get the error regardless of the getinfo. Commenting out >>>>> ThreadIRCSeed fixed the problem. >>>>> >>>>>> Does it still do it if you didn't do getinfo? >>>>>> >>>>>> You could comment out the CreateThreads listed below, then re-enable >>>>>> them one at a time until it does it again. Then we would know which >>>>>> thread the problem is in. >>>>>> >>>>>> net.cpp, under // Start threads >>>>>> CreateThread(ThreadIRCSeed, NULL) >>>>>> CreateThread(ThreadSocketHandler, NULL, true) >>>>>> CreateThread(ThreadOpenConnections, NULL) >>>>>> CreateThread(ThreadMessageHandler, NULL) >>>>>> >>>>>> init.cpp: >>>>>> CreateThread(ThreadRPCServer, NULL); >>>>>> >>>>>> mmalmi@cc.hut.fi wrote: >>>>>>> Here goes. I forgot to mention the crash error message: >>>>>>> >>>>>>> terminate called after throwing an instance of 'std::bad_alloc' >>>>>>> what(): std::bad_alloc >>>>>>> >>>>>>>> Could you send me the debug.log? >>>>>>>> >>>>>>>> mmalmi@cc.hut.fi wrote: >>>>>>>>> I tried debugging my build of bitcoind with ddd debugger, but >>>>>>>>> didn't have much success yet. It always ends up taking all >>>>>>>>> the system's memory and finally crashes. Could you please >>>>>>>>> send me again the latest 64 bit build of bitcoind, so I can >>>>>>>>> see if the problem is about my build? >>>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>>>> >>> >>> >>> > > >