So I am interested in hearing how much memory savings we are seeing from all this. Can
you run freeamp on your machine pre-patch and post-patch with the same
playlists, etc. and let us know the memory footprints?
elrod
Chris Kuklewicz wrote:
> [ Is the #freeamp hidden? It was not on the list, but I could join
> it... ]
>
> Theme for this whole thread of discussion:
>
> [chrisk@kuklewicz ~/www]$ fortune
> Nothing endures but change.
> -- Heraclitus
>
> An update on my progress,
>
> Yesterday I replaced how metadata is stored internally and much of how
> it is accessed of outside (e.g. PeekAlbum() not Album().c_str() and
> Album_length() not Album().size() and so on). Before I submit I will
> temporarily disable the const string Album() style access methods and
> follow the compiler errors to audit how the returned strings are used.
> The strings are now *temporary* objects, instead of "const string&"
> references to MetaData fields.
>
> With help from Isaac I managed to get it compiling and it ran & loaded
> the playlist just find, but editing a comment segfaulted.
>
> I have it cleaner today, with a slightly more evolved design and it
> could edit metadata okay, but opening the streams part of the tree
> eventually segfaulted. It seems I did need to be thread safe. I
> observed the two [New Thread xxx (runnable)] notices, and the names of
> the functions in the back trace (at end of message). So I now use a
> Mutex in the HashStore to protect everything. Also, thank you to
> whomever already added the AutoMutex class!
>
> I also added a static const char empty[1]=""; to the HashStore for
> caching (merge duplicates) of all zero length strings. I also went
> back and changes the HashStore methods to use const everywhere again.
>
> Old example output from "cerr << *m_store" after it loaded my database
> on startup:
>
> HashStore report
> Logical Strings held: 2317
> Strings in HSet: 1009
> Strings in HMap: 146
>
> So very soon I will have a whopper of a patch. Any special handling
> requests?
>
> Currently: I did make clean && make, and now I sleep.
>
> Most recent crash as seen by gdb, as evidence that thread safety is required:
>
> @ ui/musicbrowser/unix/src/browsertree.cpp : 1370 : void
>GTKMusicBrowser::StreamTimer()
> LWP 15638 exited.
> @ ui/musicbrowser/unix/src/browsertree.cpp : 1535 : void
>GTKMusicBrowser::FillRelatable(bool = false)
> [New Thread 28701 (runnable)]
> Delayed SIGSTOP caught for LWP 15639.
> @ ui/musicbrowser/unix/src/browsertree.cpp : 1331 : static void
>GTKMusicBrowser::stream_timer_func(void *)
> @ lib/http/src/Http.cpp : 92 : enum Error Http::DownloadToString(const class string
>&, class string &)
> args: url=http://www.freeamp.org/streams.xml, page=, m_bytesInBuffer=0,
>m_bufferSize=0, (void *)m_buffer=(nil)
> @ lib/http/src/Http.cpp : 181 : enum Error Http::Download(const class string &, bool)
> args: url=http://www.freeamp.org/streams.xml, fileDownload=0
> @ lib/http/src/Http.cpp : 182 : enum Error Http::Download(const class string &, bool)
> args: m_bufferSize=0, m_bytesInBuffer=0, (void*)m_buffer=(nil)
> @ ui/musicbrowser/unix/src/browsertree.cpp : 1535 : void
>GTKMusicBrowser::FillRelatable(bool = false)
> [New Thread 29726 (runnable)]
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 29726 (runnable)]
> 0x80d4043 in hashtable<char *, char *, hash<char *>, identity<char *>, EqualString,
>__default_alloc_template<true, 0> >::erase (this=0x813aa50, it=@0xbbfffaa4)
> at /usr/include/g++-2/stl_hashtable.h:777
> 777 node* next = cur->next;
> (gdb) bt
> #0 0x80d4043 in hashtable<char *, char *, hash<char *>, identity<char *>,
>EqualString, __default_alloc_template<true, 0> >::erase (this=0x813aa50,
>it=@0xbbfffaa4)
> at /usr/include/g++-2/stl_hashtable.h:777
> #1 0x80d5ddd in hashtable<char *, char *, hash<char *>, identity<char *>,
>EqualString, __default_alloc_template<true, 0> >::erase (this=0x813aa50,
>it=@0xbbfffacc)
> at /usr/include/g++-2/stl_hashtable.h:829
> #2 0x80d5da7 in hash_set<char *, hash<char *>, EqualString,
>__default_alloc_template<true, 0> >::erase (this=0x813aa50, it={cur = 0x81ef448, ht =
>0x813aa50})
> at /usr/include/g++-2/stl_hash_set.h:160
> #3 0x809ecf2 in HashStore::unref (this=0x813aa50,
> s=0x81eb4a8 "\030\e\b\036@0's (Rob's Pick) ")
> at base/src/charstore.cpp:204
> #4 0x80e48fc in MetaData::setentry (dest=@0xbbfffcf4,
> src=0x40e3b7c0 "Upbeat 80's (Rob's Pick)") at base/include/metadata.h:166
> #5 0x80e4319 in MetaData::SetTitle (this=0xbbfffcec,
> title=0x40e3b7c0 "Upbeat 80's (Rob's Pick)") at base/include/metadata.h:83
> #6 0x4096f063 in Misc::ReadMetaData (this=0x8148ff0,
> url=0x40e3b730 "http://216.32.166.94:8076/\"", metadata=0xbbfffcec)
> at plm/metadata/misc/misc.cpp:227
> #7 0x80b2721 in PlaylistManager::MetaDataThreadFunction (this=0x81452f8,
> list=0x81e0f28) at base/src/playlist.cpp:2472
> #8 0x80b292b in PlaylistManager::metadata_thread_function (arg=0x81f34f0)
> at base/src/playlist.cpp:2519
> ---Type <return> to continue, or q <return> to quit---
> #9 0x80c4b4d in pthreadThread::InternalThreadFunction (this=0x8b93788)
> at base/unix/src/pthreadthread.cpp:73
> #10 0x80c4b1d in pthreadThread::internalThreadFunction (arg=0x8b93788)
> at base/unix/src/pthreadthread.cpp:62
> #11 0x40028cd5 in pthread_start_thread (arg=0xbbfffe40) at manager.c:241
> #12 0x4002969c in pthread_start_thread_event (arg=0xbbfffe40) at manager.c:264
>
> Oh, and gdb used up way way way too many resources for my machine
> during the above session:
>
> 12:29am up 17 days, 5 min, 5 users, load average: 0.27, 1.29, 0.95
> 105 processes: 85 sleeping, 1 running, 19 zombie, 0 stopped
> CPU states: 4.0% user, 3.6% system, 0.0% nice, 92.2% idle
> Mem: 79256K av, 77216K used, 2040K free, 21472K shrd, 1636K buff
> Swap: 128480K av, 116904K used, 11576K free 14440K cached
>
> PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
> 15578 ckuklewi 0 0 80992 20M 496 S 0 0.0 26.5 0:57 gdb
> 15584 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:08 freeamp
> 15589 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:00 freeamp
> 15590 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:00 freeamp
> 15591 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:00 freeamp
> 15592 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:05 freeamp
> 15593 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:00 freeamp
> 15595 ckuklewi 0 0 17660 17M 3872 S 0 0.0 22.2 0:10 freeamp
> 30341 root 13 0 10616 8880 1644 S 0 1.3 11.2 35:10 X
> 2972 ckuklewi 0 0 9056 3680 2444 S 0 0.0 4.6 8:28 emacs
> 30386 ckuklewi 0 0 3596 3016 2244 S 0 0.0 3.8 0:22 panel
> 30377 ckuklewi 0 0 2268 2032 924 S 0 0.0 2.5 0:52 sawfish
> 30404 ckuklewi 0 0 1964 1460 1196 S 0 0.0 1.8 0:25 tasklist_app
> 30423 ckuklewi 0 0 5148 1116 712 S 0 0.0 1.4 0:23 gnome-termin
> _______________________________________________
> [EMAIL PROTECTED]
> http://www.freeamp.org/mailman/listinfo/freeamp-dev
_______________________________________________
[EMAIL PROTECTED]
http://www.freeamp.org/mailman/listinfo/freeamp-dev