From kde-devel Tue Nov 09 18:42:51 1999 From: David Faure Date: Tue, 09 Nov 1999 18:42:51 +0000 To: kde-devel Subject: QMap bug ? (Re: kioslaves don't die?) X-MARC-Message: https://marc.info/?l=kde-devel&m=94217296212466 > At Die, 09 Nov 1999 David Faure wrote: > > > At Die, 09 Nov 1999 David Faure wrote: > > > > > Boy. I need some coffee. What I meant to say here is that KIOJob re-uses the > > > > > slaves for efficeincy and as such keeps io-slaves around using a least > > > > > recently used LRU in memory cache. But AFAIK this is only in > > > > > memory and nothing is supposed to be written out to file. Am I wrong > > > > > here David ? > > > > No this is right (we don't pollute /tmp anymore !), > > > > but it doesn't explain the 100 kioslaves problem. > > > > > > > > > > Hi > > > > > > probably I found to cause of the problem : QMap - which is used to store the > > > running kioslaves - seems to hold one entry per key only. (protocol in that > > > case) I added lots of debugging stuff in kio_job.cpp to find that out. > > This > > > really explains why processes get "forgotten". Anything we > > > could do against it? > > > > Huh ?? > > A QMap can contain several entries per keys. I don't think that's the real > > bug, otherwise a lot of stuff would be broken in KDE !! > > > > Well, perhaps you could check QMap's behaviour with a 4-lines test > > program... Just to make sure :) > > > 4-line test? Hmm. I don't manage it that short. But - what is > wrong with this 30-liner? > > ------------SNIP---------------- > #include > #include > #include > > int main (void) > { > char keyname[64]; > int i; > > QMap < QString, int > mymap; > for (i=0;i<5;++i) > { > int r; > r = rand (); > #ifdef VARIABLE_KEY > sprintf (keyname, "key%d", rand ()); > #else > strcpy (keyname, "key"); > #endif > mymap.insert (keyname, r); > printf ("New member: key %s , random %d\n", keyname, r); > QMap < QString, int >::Iterator it = mymap.begin (); > while (it != mymap.end ()) > { > printf ("Key: %s Content : %d\n", it.key ().data (), (*it)); > ++it; > } > } > } > ---------------SNIP---------------------- > > > With VARIABLE_KEYS undefined I get : > > New member: key key , random 1804289383 > Key: key Content : 1804289383 > New member: key key , random 846930886 > Key: key Content : 846930886 > New member: key key , random 1681692777 > Key: key Content : 1681692777 > New member: key key , random 1714636915 > Key: key Content : 1714636915 > New member: key key , random 1957747793 > Key: key Content : 1957747793 > > With VARIABLE_KEYS defined I get : > > New member: key key846930886 , random 1804289383 > Key: key846930886 Content : 1804289383 > New member: key key1714636915 , random 1681692777 > Key: key1714636915 Content : 1681692777 > Key: key846930886 Content : 1804289383 > New member: key key424238335 , random 1957747793 > Key: key1714636915 Content : 1681692777 > Key: key424238335 Content : 1957747793 > Key: key846930886 Content : 1804289383 > New member: key key1649760492 , random 719885386 > Key: key1649760492 Content : 719885386 > Key: key1714636915 Content : 1681692777 > Key: key424238335 Content : 1957747793 > Key: key846930886 Content : 1804289383 > New member: key key1189641421 , random 596516649 > Key: key1189641421 Content : 596516649 > Key: key1649760492 Content : 719885386 > Key: key1714636915 Content : 1681692777 > Key: key424238335 Content : 1957747793 > Key: key846930886 Content : 1804289383 > > > > Can you test it on your machine too? Just did. Same behaviour here ! (Using Qt CVS from 30-Oct-1999) But .. reading qmap.h ... insert() calls insertSingle() so this would be expected. insertMulti() exists but only in QMapPrivate ??!?? Torben ? -- David FAURE david@mandrakesoft.com, faure@kde.org http://home.clara.net/faure/ KDE, Making The Future of Computing Available Today