<?xml version="1.0"?>
<statsTarget><link>http://cia.vc/stats/project/gtk-gnutella</link><counters><counter name="thisWeek" lastEventTime="1337877177" firstEventTime="1337599182">6</counter><counter name="forever" lastEventTime="1337877177" firstEventTime="1073734604">15009</counter><counter name="lastMonth" lastEventTime="1335561043" firstEventTime="1333315842">43</counter><counter name="lastWeek" lastEventTime="1337528761" firstEventTime="1337459840">7</counter><counter name="thisMonth" lastEventTime="1337877177" firstEventTime="1335837145">15</counter></counters><metadata><item name="subtitle"><value type="text/plain">None</value></item><item name="description"><value type="text/plain">None</value></item><item name="links-filter"><value type="text/plain">None</value></item><item name="title"><value type="text/plain">Gtk-gnutella</value></item><item name="url"><value type="text/plain">None</value></item><item name="related-filter"><value type="text/plain">None</value></item></metadata><recentMessages><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>           <module/>         </source>         <timestamp>1337861234</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>d7facbf</revision>             <log>Factorized ADNS message definition and added magic number in message header. - https://github.com/gtk-gnutella/gtk-gnutella/commit/d7facbfa41f7eb9e10687bd515a132d85ec70f8c</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/d7facbfa41f7eb9e10687bd515a132d85ec70f8c</url>             <files>               <file> MANIFEST</file> <file>src/lib/adns.c</file> <file>src/lib/mingw32.c</file> <file>src/lib/adns_msg.h </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>           <module/>         </source>         <timestamp>1337789484</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>10583f7</revision>             <log>ADNS: normalized messages, using G_STRFUNC and %m. - https://github.com/gtk-gnutella/gtk-gnutella/commit/10583f7f5b148a72171ce36e2dc73a4b115fa6ae</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/10583f7f5b148a72171ce36e2dc73a4b115fa6ae</url>             <files>               <file> src/lib/adns.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337593186</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>b02332d</revision>             <log>Rename mutex_get() and mutex_release() to bear more conventional names. - https://github.com/gtk-gnutella/gtk-gnutella/commit/b02332d20812282436899d5455acb150e2ac65ba</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/b02332d20812282436899d5455acb150e2ac65ba</url>             <files>               <file> src/lib/bfd_util.c</file> <file>src/lib/cq.c</file> <file>src/lib/hashtable.c</file> <file>src/lib/mutex.c</file> <file>src/lib/mutex.h</file> <file>src/lib/once.c</file> <file>src/lib/stacktrace.c</file> <file>src/lib/thread.c</file> <file>src/lib/vmm.c</file> <file>src/lib/xmalloc.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337585788</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>8080325</revision>             <log>Properly account spinlock / mutex destruction at shutdown time. - https://github.com/gtk-gnutella/gtk-gnutella/commit/80803256c76b7b9878dd94b08a6c35b459f397be</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/80803256c76b7b9878dd94b08a6c35b459f397be</url>             <files>               <file> src/lib/mutex.c</file> <file>src/lib/spinlock.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337582996</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>790ac69</revision>             <log>Perform xmalloc_split_setup() as soon as possible after freelist is initialized. - https://github.com/gtk-gnutella/gtk-gnutella/commit/790ac69b087e2121524dba30856fbd0565733bb6</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/790ac69b087e2121524dba30856fbd0565733bb6</url>             <files>               <file> src/lib/xmalloc.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337582840</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>8632ac1</revision>             <log>Avoid too many exceptions in a row on Windows. - https://github.com/gtk-gnutella/gtk-gnutella/commit/8632ac10a47f44c0fab052432c5590d8461279e4</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/8632ac10a47f44c0fab052432c5590d8461279e4</url>             <files>               <file> src/lib/mingw32.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337512784</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>0e67814</revision>             <log>Adjusted initialization procedures for FreeBSD pthread idiosyncracies. - https://github.com/gtk-gnutella/gtk-gnutella/commit/0e67814698f4d29bcc33abebaf6e38440bfd399a</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/0e67814698f4d29bcc33abebaf6e38440bfd399a</url>             <files>               <file> src/lib/thread.c</file> <file>src/lib/vmm.c</file> <file>src/lib/xmalloc.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337506581</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>7072d3d</revision>             <log>mutex_ungrab(): trace releasing thread ID on assertion failure. - https://github.com/gtk-gnutella/gtk-gnutella/commit/7072d3da30548a8c26bf50967d3c805ccc3a0244</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/7072d3da30548a8c26bf50967d3c805ccc3a0244</url>             <files>               <file> src/lib/mutex.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337506318</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>b6ee6e4</revision>             <log>mutex_is_owned_by_fast(): forgot type (was defaulting to &quot;int&quot;, which was OK). - https://github.com/gtk-gnutella/gtk-gnutella/commit/b6ee6e463ca3fe3c3d9509a62d2c83fc7c39fd22</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/b6ee6e463ca3fe3c3d9509a62d2c83fc7c39fd22</url>             <files>               <file> src/lib/mutex.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337506172</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>a2c1e16</revision>             <log>bfd_util_compute_offset(): don't substract void * pointers. - https://github.com/gtk-gnutella/gtk-gnutella/commit/a2c1e16ac153fb0fd477c464d570c15ae8a988fc</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/a2c1e16ac153fb0fd477c464d570c15ae8a988fc</url>             <files>               <file> src/lib/bfd_util.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337505585</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>ca4013c</revision>             <log>Made thread quasi ID truly unique on 64-bit machines. - https://github.com/gtk-gnutella/gtk-gnutella/commit/ca4013c84d56e57c02c3cb316df141d3b776f227</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/ca4013c84d56e57c02c3cb316df141d3b776f227</url>             <files>               <file> src/lib/thread.c</file> <file>src/lib/thread.h </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337444579</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>a245110</revision>             <log>Use G_GNUC_EXTENSION to shut up gcc warnings about braced expressions. - https://github.com/gtk-gnutella/gtk-gnutella/commit/a245110352508946878d0489797ab382a8d1737b</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/a245110352508946878d0489797ab382a8d1737b</url>             <files>               <file> src/lib/elist.h</file> <file>src/lib/erbtree.h </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1337444035</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>aa66e82</revision>             <log>Bumped date. (+41 more commits...) - https://github.com/gtk-gnutella/gtk-gnutella/commit/aa66e82119ff9a9438b35c01fcd4456bb6837548</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/aa66e82119ff9a9438b35c01fcd4456bb6837548</url>             <files>               <file> src/gtk-gnutella.h </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1336166180</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>a5a5f89</revision>             <log>Fixed outdated comment. (+7 more commits...) - https://github.com/gtk-gnutella/gtk-gnutella/commit/a5a5f89ee9048e111625beb8fa442cfc0082ed40</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/a5a5f89ee9048e111625beb8fa442cfc0082ed40</url>             <files>               <file> src/lib/random.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335821896</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>4a6985f</revision>             <log>Disable move_node() now that we use a hikset to store DHT nodes in buckets.

This fixes bugs #3522465 and #3522466. (+20 more commits...) - https://github.com/gtk-gnutella/gtk-gnutella/commit/4a6985f08bc419d4b3ba50459ad55757bc18e34e</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/4a6985f08bc419d4b3ba50459ad55757bc18e34e</url>             <files>               <file> src/dht/routing.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335546057</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>20c8be9</revision>             <log>thread_is_single(): fixed inverted logic in previous commit. - https://github.com/gtk-gnutella/gtk-gnutella/commit/20c8be96ac02d5de67ff5f5bfd57343f34ea2238</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/20c8be96ac02d5de67ff5f5bfd57343f34ea2238</url>             <files>               <file> src/lib/thread.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335540297</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>1b34f93</revision>             <log>thread_single(): properly handle calls in the middle of a thread creation. - https://github.com/gtk-gnutella/gtk-gnutella/commit/1b34f939dbd0ac915ea20ed6304b48aa7f753f86</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/1b34f939dbd0ac915ea20ed6304b48aa7f753f86</url>             <files>               <file> src/lib/thread.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335477208</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>19cc7ab</revision>             <log>thread_find(): was computing wrong quick thread ID now that arg can be NULL. - https://github.com/gtk-gnutella/gtk-gnutella/commit/19cc7abaf7b4fac45c2f507b01271df244c7a127</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/19cc7abaf7b4fac45c2f507b01271df244c7a127</url>             <files>               <file> src/lib/thread.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335473967</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>4026dcd</revision>             <log>thread_find(): now use TID lookup most of the time, which should be safer.

We reserve the location of the thread based on its stack pointer to stack
pointer validation routines. (+5 more commits...) - https://github.com/gtk-gnutella/gtk-gnutella/commit/4026dcdab8df891a28809cd0f05e4b7c430796ec</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/4026dcdab8df891a28809cd0f05e4b7c430796ec</url>             <files>               <file> src/lib/thread.c </file>             </files>           </commit>         </body>       </message><message>         <generator>           <name>github</name>           <version>1</version>           <url>http://www.github.com</url>         </generator>         <source>           <project>gtk-gnutella</project>           <branch>devel</branch>         </source>         <timestamp>1335460249</timestamp>         <body>           <commit>             <author>Raphael Manfredi</author>             <revision>38e63ff</revision>             <log>Revisited the new thread recording logic to avoid race conditions.

The old code was not behaving correctly when we were recording a new thread:
any mutex grabbed before the insertion of the new thread in the global hash
table was accounted for in the wrong thread, leading to assertion failures
later when the mutex was released by the thread.

Also changed thread_find() to make sure it now scan the thread array by
small thread ID looking for a matching thread ID when we are in the process
of creating a new thread.  This is slower because it involves a call to
thread_self() which may again do the same thing at the lower pthread level,
but this only happens when a new thread is in the critical section where it
registers itself. - https://github.com/gtk-gnutella/gtk-gnutella/commit/38e63fffc4dd8d7a520674779ea21b1ee29c7e5b</log>             <url>https://github.com/gtk-gnutella/gtk-gnutella/commit/38e63fffc4dd8d7a520674779ea21b1ee29c7e5b</url>             <files>               <file> src/lib/thread.c </file>             </files>           </commit>         </body>       </message></recentMessages></statsTarget>
