Message from discussion
NSAutorelease pool loop
Received: by 10.216.237.155 with SMTP id y27mr974865weq.11.1346158843294;
Tue, 28 Aug 2012 06:00:43 -0700 (PDT)
X-BeenThere: cocotron-dev@googlegroups.com
Received: by 10.180.81.71 with SMTP id y7ls415498wix.3.gmail; Tue, 28 Aug 2012
06:00:42 -0700 (PDT)
Received: by 10.216.233.196 with SMTP id p46mr976742weq.0.1346158842231;
Tue, 28 Aug 2012 06:00:42 -0700 (PDT)
Received: by 10.216.74.136 with SMTP id x8mswed;
Thu, 23 Aug 2012 15:17:18 -0700 (PDT)
Received: by 10.180.82.226 with SMTP id l2mr11659wiy.1.1345760237805;
Thu, 23 Aug 2012 15:17:17 -0700 (PDT)
Received: by 10.180.82.226 with SMTP id l2mr11658wiy.1.1345760237782;
Thu, 23 Aug 2012 15:17:17 -0700 (PDT)
Return-Path: <af...@datacell.com>
Received: from mail.datacell.com (mail.datacell.com. [85.195.194.153])
by gmr-mx.google.com with ESMTPS id em7si97301wib.2.2012.08.23.15.17.17
(version=TLSv1/SSLv3 cipher=OTHER);
Thu, 23 Aug 2012 15:17:17 -0700 (PDT)
Received-SPF: permerror (google.com: domain of af...@datacell.com uses a mechanism not recognized by this client. unknown mechanisms: )) client-ip=85.195.194.153;
Authentication-Results: gmr-mx.google.com; spf=permerror (google.com: domain of af...@datacell.com uses a mechanism not recognized by this client. unknown mechanisms: )) smtp.mail=af...@datacell.com
X-Footer: ZGF0YWNlbGwuY29t
Received: from retinix.fink.org ([85.195.240.10])
(authenticated user af...@datacell.com)
by mail.datacell.com (Kerio Connect 7.4.2)
(using TLSv1/SSLv3 with cipher AES128-SHA (128 bits))
for cocotron-dev@googlegroups.com;
Fri, 24 Aug 2012 00:17:16 +0200
From: Andreas Fink <af...@datacell.com>
Content-Type: multipart/alternative; boundary="Apple-Mail=_F6EB8970-A13E-46E2-879C-69B6D8161663"
Subject: NSAutorelease pool loop
Message-Id: <3024AB6B-E0BC-47CE-9210-BD73E0CE571F@datacell.com>
Date: Fri, 24 Aug 2012 00:17:15 +0200
To: "cocotron-dev@googlegroups.com" <cocotron-dev@googlegroups.com>
Mime-Version: 1.0 (Mac OS X Mail 6.0 \(1486\))
X-Mailer: Apple Mail (2.1486)
--Apple-Mail=_F6EB8970-A13E-46E2-879C-69B6D8161663
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
Hi,
We finally got a Foundation library for linux working under 64bit. =
However we run into new problems in multithreading.
The app I'm trying to port is fully multi threaded. After spawning off a =
thread it creates an autorelease pool for that specific thread.
This however seems to cause a problem which raises an exception. And the =
string formatting to print the exception then raises an exception again. =
This loops at infinitum...
This is the code snipped of a generic new thread I use everywhere:
static void *new_thread(void *arg)
{
int ret;
struct new_thread_args *p =3D arg;
=09
debug("gwlib.gwthread", 0, "Thread %ld (%s) maps to pid %ld.",
p->ti->number, p->ti->name, (long) p->ti->pid);
p->ti->pool =3D [[NSAutoreleasePool alloc] init]; <- causes the =
exception
(p->func)(p->arg);
Now I wonder if there could be a workaround or how Cocotron handles =
autorelease pools differently than MacOS X when it comes to threads.
Here's a end of a backtrace (after 145'500 stack frames)
#145548 0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104
#145549 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305
#145550 0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102
#145551 0x00007ffff7a5df5f in NSStringWithFormatArguments (format=3D<value=
optimized out>, arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655
#145552 0x00007ffff79f7e0c in +[NSException raise:format:arguments:] =
(self=3D<value optimized out>, _cmd=3D0x0, name=3D<value optimized out>,=20=
format=3D<value optimized out>, arguments=3D0x0) at =
src/NSException.m:42
#145553 0x00007ffff79f7de0 in +[NSException raise:format:] (self=3D<value =
optimized out>, _cmd=3D0x0, name=3D<value optimized out>, format=3D<value =
optimized out>)
at src/NSException.m:38
#145554 0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104
#145555 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305
#145556 0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102
#145557 0x00007ffff7a5df5f in NSStringWithFormatArguments (format=3D<value=
optimized out>, arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655
#145558 0x00007ffff79f7e0c in +[NSException raise:format:arguments:] =
(self=3D<value optimized out>, _cmd=3D0x0, name=3D<value optimized out>,=20=
format=3D<value optimized out>, arguments=3D0x0) at =
src/NSException.m:42
#145559 0x00007ffff79f7de0 in +[NSException raise:format:] (self=3D<value =
optimized out>, _cmd=3D0x0, name=3D<value optimized out>, format=3D<value =
optimized out>)
at src/NSException.m:38
#145560 0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104
#145561 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305
#145562 0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102
#145563 0x00007ffff7a5df5f in NSStringWithFormatArguments (format=3D<value=
optimized out>, arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655
#145564 0x00007ffff79f7e0c in +[NSException raise:format:arguments:] =
(self=3D<value optimized out>, _cmd=3D0x0, name=3D<value optimized out>,=20=
format=3D<value optimized out>, arguments=3D0x0) at =
src/NSException.m:42
#145565 0x00007ffff79f7de0 in +[NSException raise:format:] (self=3D<value =
optimized out>, _cmd=3D0x0, name=3D<value optimized out>, format=3D<value =
optimized out>)
at src/NSException.m:38
#145566 0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104
#145567 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305
#145568 0x00007ffff79de1bf in -[NSAutoreleasePool init] (self=3D<value =
optimized out>, _cmd=3D0x0) at src/NSAutoreleasePool.m:49
#145569 0x000000000083f612 in new_thread (arg=3D0x72ac330) at =
gwlib/gwthread-pthread.m:401
#145570 0x0000003ed1a07851 in start_thread () from =
/lib64/libpthread.so.0
#145571 0x0000003ed12e76dd in clone () from /lib64/libc.so.6
(gdb)=20=
--Apple-Mail=_F6EB8970-A13E-46E2-879C-69B6D8161663
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dus-ascii"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; =
"><div>Hi,</div><div><br></div><div>We finally got a Foundation library =
for linux working under 64bit. However we run into new problems in =
multithreading.</div><div>The app I'm trying to port is fully multi =
threaded. After spawning off a thread it creates an autorelease pool for =
that specific thread.</div><div>This however seems to cause a problem =
which raises an exception. And the string formatting to print the =
exception then raises an exception again. This loops at =
infinitum...</div><div><br></div><div>This is the code snipped of a =
generic new thread I use everywhere:</div><div><br></div><div><div><font =
face=3D"Courier New">static void *new_thread(void =
*arg)</font></div><div><font face=3D"Courier =
New">{</font></div><div><font face=3D"Courier New"> int =
ret;</font></div><div><font face=3D"Courier New"> struct =
new_thread_args *p =3D arg;</font></div><div><font face=3D"Courier =
New"> <span class=3D"Apple-tab-span" style=3D"white-space: =
pre; "> </span></font></div><div><font face=3D"Courier New"> =
debug("gwlib.gwthread", 0, "Thread %ld (%s) maps to pid =
%ld.",</font></div><div><font face=3D"Courier New"> =
p->ti->number, p->ti->name, (long) =
p->ti->pid);</font></div><div><font face=3D"Courier New"> =
p->ti->pool =3D [[NSAutoreleasePool alloc] init]; <- =
causes the exception</font></div><div><font face=3D"Courier New"> =
(p->func)(p->arg);</font></div></div><div><font =
face=3D"Courier New"><br></font></div><div><br></div><div>Now I wonder =
if there could be a workaround or how Cocotron handles autorelease pools =
differently than MacOS X when it comes to =
threads.</div><div><br></div><div><br></div><div>Here's a end of a =
backtrace (after 145'500 stack frames)</div><div><br></div><div><font =
face=3D"Courier New">#145548 0x00007ffff7a19693 in =
NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104</font></div><div><font face=3D"Courier =
New">#145549 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305</font></div><div><font face=3D"Courier New">#145550 =
0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102</font></div><div><font =
face=3D"Courier New">#145551 0x00007ffff7a5df5f in =
NSStringWithFormatArguments (format=3D<value optimized out>, =
arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655</font></div><div><font face=3D"Courier =
New">#145552 0x00007ffff79f7e0c in +[NSException =
raise:format:arguments:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, </font></div><div><font =
face=3D"Courier New"> format=3D<value optimized out>, =
arguments=3D0x0) at src/NSException.m:42</font></div><div><font =
face=3D"Courier New">#145553 0x00007ffff79f7de0 in +[NSException =
raise:format:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, format=3D<value optimized =
out>)</font></div><div><font face=3D"Courier New"> at =
src/NSException.m:38</font></div><div><font face=3D"Courier New">#145554 =
0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104</font></div><div><font face=3D"Courier =
New">#145555 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305</font></div><div><font face=3D"Courier New">#145556 =
0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102</font></div><div><font =
face=3D"Courier New">#145557 0x00007ffff7a5df5f in =
NSStringWithFormatArguments (format=3D<value optimized out>, =
arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655</font></div><div><font face=3D"Courier =
New">#145558 0x00007ffff79f7e0c in +[NSException =
raise:format:arguments:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, </font></div><div><font =
face=3D"Courier New"> format=3D<value optimized out>, =
arguments=3D0x0) at src/NSException.m:42</font></div><div><font =
face=3D"Courier New">#145559 0x00007ffff79f7de0 in +[NSException =
raise:format:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, format=3D<value optimized =
out>)</font></div><div><font face=3D"Courier New"> at =
src/NSException.m:38</font></div><div><font face=3D"Courier New">#145560 =
0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104</font></div><div><font face=3D"Courier =
New">#145561 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305</font></div><div><font face=3D"Courier New">#145562 =
0x00007ffff79de42f in NSAutorelease (object=3D<value optimized =
out>) at src/NSAutoreleasePool.m:102</font></div><div><font =
face=3D"Courier New">#145563 0x00007ffff7a5df5f in =
NSStringWithFormatArguments (format=3D<value optimized out>, =
arguments=3D<value optimized out>) at =
src/NSStringFormatter.m:655</font></div><div><font face=3D"Courier =
New">#145564 0x00007ffff79f7e0c in +[NSException =
raise:format:arguments:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, </font></div><div><font =
face=3D"Courier New"> format=3D<value optimized out>, =
arguments=3D0x0) at src/NSException.m:42</font></div><div><font =
face=3D"Courier New">#145565 0x00007ffff79f7de0 in +[NSException =
raise:format:] (self=3D<value optimized out>, _cmd=3D0x0, =
name=3D<value optimized out>, format=3D<value optimized =
out>)</font></div><div><font face=3D"Courier New"> at =
src/NSException.m:38</font></div><div><font face=3D"Courier New">#145566 =
0x00007ffff7a19693 in NSPlatformCurrentThread () at =
src/NSMemoryFunctions_posix.m:104</font></div><div><font face=3D"Courier =
New">#145567 0x00007ffff7a6ae9b in NSThreadCurrentPool () at =
src/NSThread.m:305</font></div><div><font face=3D"Courier New">#145568 =
0x00007ffff79de1bf in -[NSAutoreleasePool init] (self=3D<value =
optimized out>, _cmd=3D0x0) at =
src/NSAutoreleasePool.m:49</font></div><div><font face=3D"Courier =
New">#145569 0x000000000083f612 in new_thread (arg=3D0x72ac330) at =
gwlib/gwthread-pthread.m:401</font></div><div><font face=3D"Courier =
New">#145570 0x0000003ed1a07851 in start_thread () from =
/lib64/libpthread.so.0</font></div><div><font face=3D"Courier =
New">#145571 0x0000003ed12e76dd in clone () from =
/lib64/libc.so.6</font></div><div><font face=3D"Courier =
New">(gdb) </font></div></body></html>=
--Apple-Mail=_F6EB8970-A13E-46E2-879C-69B6D8161663--