activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: Consumer Deadlock
Date Fri, 28 Jul 2006 11:08:21 GMT
I don't see a deadlock there - so I don't think you are experiencing a
thread deadlock.

On 7/28/06, osian <osian@osian.me.uk> wrote:
>
> Here is the full thread dump:
>
> Full thread dump Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode):
>
> "ActiveMQ Transport: tcp:///127.0.0.1:3552" daemon prio=10 tid=0x00abecb8
> nid=0xb2c runnable [0x286bf000..0x286bfaec]
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:48)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:55)
>         at java.io.DataInputStream.readInt(DataInputStream.java:353)
>         at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:274)
>         at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:142)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Connection Dispatcher: 8820986" daemon prio=6 tid=0x00abe330
> nid=0x828 in Object.wait() [0x2867f000..0x2867fa6
> c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05511ce8> (a java.lang.Object)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:91)
>         - locked <0x05511ce8> (a java.lang.Object)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.access$000(DedicatedTaskRunner.java:24)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:38)
>
> "ActiveMQ Transport: tcp:///127.0.0.1:3498" daemon prio=10 tid=0x00ab8058
> nid=0xef0 runnable [0x2863f000..0x2863fcec]
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:48)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:55)
>         at java.io.DataInputStream.readInt(DataInputStream.java:353)
>         at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:274)
>         at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:142)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Connection Dispatcher: 17912146" daemon prio=6 tid=0x00a9cbc0
> nid=0x9d8 in Object.wait() [0x285ff000..0x285ffc
> 6c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x054e6018> (a java.lang.Object)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:91)
>         - locked <0x054e6018> (a java.lang.Object)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.access$000(DedicatedTaskRunner.java:24)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:38)
>
> "ActiveMQ Scheduler" daemon prio=10 tid=0x00a9d760 nid=0xa14 in
> Object.wait() [0x285bf000..0x285bf9ec]
>         at java.lang.Object.wait(Native Method)
>         at java.lang.Object.wait(Object.java:432)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.timedWait(TimeUnit.java:301)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.DelayQueue.take(DelayQueue.java:156)
>         - locked <0x054407e8> (a java.lang.Object)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThr
> eadPoolExecutor.java:590)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Scheduler" daemon prio=10 tid=0x00ab4650 nid=0x180 in
> Object.wait() [0x2857f000..0x2857fa6c]
>         at java.lang.Object.wait(Native Method)
>         at java.lang.Object.wait(Object.java:432)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.timedWait(TimeUnit.java:301)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.DelayQueue.take(DelayQueue.java:156)
>         - locked <0x054407e8> (a java.lang.Object)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThr
> eadPoolExecutor.java:590)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport: tcp:///127.0.0.1:3490" daemon prio=10 tid=0x00ab4428
> nid=0x164 runnable [0x2853f000..0x2853faec]
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:48)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:55)
>         at java.io.DataInputStream.readInt(DataInputStream.java:353)
>         at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:274)
>         at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:142)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Connection Dispatcher: 29529080" daemon prio=6 tid=0x2710ad98
> nid=0xdbc in Object.wait() [0x284ff000..0x284ffd
> 6c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x054b70d0> (a java.lang.Object)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:91)
>         - locked <0x054b70d0> (a java.lang.Object)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.access$000(DedicatedTaskRunner.java:24)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:38)
>
> "ActiveMQ Scheduler" daemon prio=10 tid=0x27470dd8 nid=0x874 in
> Object.wait() [0x284bf000..0x284bfb6c]
>         at java.lang.Object.wait(Native Method)
>         at java.lang.Object.wait(Object.java:432)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.timedWait(TimeUnit.java:301)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.DelayQueue.take(DelayQueue.java:156)
>         - locked <0x054407e8> (a java.lang.Object)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThr
> eadPoolExecutor.java:590)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Scheduler" daemon prio=10 tid=0x2747d318 nid=0xcbc in
> Object.wait() [0x2847f000..0x2847fbec]
>         at java.lang.Object.wait(Native Method)
>         at java.lang.Object.wait(Object.java:432)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.timedWait(TimeUnit.java:301)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.DelayQueue.take(DelayQueue.java:156)
>         - locked <0x054407e8> (a java.lang.Object)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThr
> eadPoolExecutor.java:590)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport: tcp:///127.0.0.1:3484" daemon prio=10 tid=0x00ac2618
> nid=0xbc runnable [0x2843f000..0x2843fc6c]
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:48)
>         at
> org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:55)
>         at java.io.DataInputStream.readInt(DataInputStream.java:353)
>         at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:274)
>         at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:142)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Connection Dispatcher: 5023414" daemon prio=6 tid=0x27474cd0
> nid=0xb98 in Object.wait() [0x27def000..0x27defce
> c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05485470> (a java.lang.Object)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:91)
>         - locked <0x05485470> (a java.lang.Object)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.access$000(DedicatedTaskRunner.java:24)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:38)
>
> "Multicast Discovery Agent Notifier" daemon prio=6 tid=0x27460e10 nid=0xa10
> in Object.wait() [0x283ff000..0x283ffd6c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x053025d8> (a
> edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock
> )
>         at java.lang.Object.wait(Object.java:474)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:315)
>         - locked <0x053025d8> (a
> edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "MulticastDiscovery: null" daemon prio=6 tid=0x27465960 nid=0xba8 runnable
> [0x283bf000..0x283bf9ec]
>         at java.net.PlainDatagramSocketImpl.receive0(Native Method)
>         at
> java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
>         - locked <0x05458958> (a java.net.PlainDatagramSocketImpl)
>         at java.net.DatagramSocket.receive(DatagramSocket.java:712)
>         - locked <0x05471c80> (a java.net.DatagramPacket)
>         - locked <0x05458998> (a java.net.MulticastSocket)
>         at
> org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent.run(MulticastDiscoveryAgent.java:25
> 4)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport Status Monitor: stomp" daemon prio=10 tid=0x27464dd0
> nid=0xa80 waiting on condition [0x2837f000..0x2
> 837faec]
>         at java.lang.Thread.sleep(Native Method)
>         at
> org.apache.activemq.broker.TransportStatusDetector.run(TransportStatusDetector.java:98)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport Server: tcp://appserver:61613?wireFormat=stomp" daemon
> prio=10 tid=0x274502b0 nid=0x20c runnable [0x
> 2833f000..0x2833fb6c]
>         at java.net.PlainSocketImpl.socketAccept(Native Method)
>         at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
>         - locked <0x05458ac0> (a java.net.SocksSocketImpl)
>         at java.net.ServerSocket.implAccept(ServerSocket.java:450)
>         at java.net.ServerSocket.accept(ServerSocket.java:421)
>         at
> org.apache.activemq.transport.tcp.TcpTransportServer.run(TcpTransportServer.java:123)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport Status Monitor: default" daemon prio=10 tid=0x274512d0
> nid=0xd1c waiting on condition [0x282ff000..0
> x282ffbec]
>         at java.lang.Thread.sleep(Native Method)
>         at
> org.apache.activemq.broker.TransportStatusDetector.run(TransportStatusDetector.java:98)
>         at java.lang.Thread.run(Thread.java:595)
>
> "MulticastDiscovery: tcp://appserver:61616" daemon prio=6 tid=0x274618f0
> nid=0x854 runnable [0x282bf000..0x282bfa6c]
>         at java.net.PlainDatagramSocketImpl.receive0(Native Method)
>         at
> java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
>         - locked <0x0545aca8> (a java.net.PlainDatagramSocketImpl)
>         at java.net.DatagramSocket.receive(DatagramSocket.java:712)
>         - locked <0x0545ace8> (a java.net.DatagramPacket)
>         - locked <0x0545ad08> (a java.net.MulticastSocket)
>         at
> org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent.run(MulticastDiscoveryAgent.java:25
> 4)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Transport Server: tcp://appserver:61616" daemon prio=10
> tid=0x27426d78 nid=0xbb4 runnable [0x2827f000..0x2827f
> c6c]
>         at java.net.PlainSocketImpl.socketAccept(Native Method)
>         at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
>         - locked <0x0546c6f0> (a java.net.SocksSocketImpl)
>         at java.net.ServerSocket.implAccept(ServerSocket.java:450)
>         at java.net.ServerSocket.accept(ServerSocket.java:421)
>         at
> org.apache.activemq.transport.tcp.TcpTransportServer.run(TcpTransportServer.java:123)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Scheduler" daemon prio=6 tid=0x274172c0 nid=0xf48 in Object.wait()
> [0x2823f000..0x2823fcec]
>         at java.lang.Object.wait(Native Method)
>         at java.lang.Object.wait(Object.java:432)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.timedWait(TimeUnit.java:301)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.DelayQueue.take(DelayQueue.java:156)
>         - locked <0x054407e8> (a java.lang.Object)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThr
> eadPoolExecutor.java:590)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:477)
>         at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
>         at java.lang.Thread.run(Thread.java:595)
>
> "derby.rawStoreDaemon" daemon prio=6 tid=0x273e9e20 nid=0xb10 in
> Object.wait() [0x275af000..0x275af9ec]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05315778> (a
> org.apache.derby.impl.services.daemon.BasicDaemon)
>         at org.apache.derby.impl.services.daemon.BasicDaemon.rest(Unknown
> Source)
>         - locked <0x05315778> (a
> org.apache.derby.impl.services.daemon.BasicDaemon)
>         at org.apache.derby.impl.services.daemon.BasicDaemon.run(Unknown
> Source)
>         at java.lang.Thread.run(Thread.java:595)
>
> "derby.antiGC" daemon prio=2 tid=0x273add68 nid=0x7dc in Object.wait()
> [0x2756f000..0x2756fa6c]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05306d50> (a
> org.apache.derby.impl.services.monitor.AntiGC)
>         at java.lang.Object.wait(Object.java:474)
>         at org.apache.derby.impl.services.monitor.AntiGC.run(Unknown Source)
>         - locked <0x05306d50> (a
> org.apache.derby.impl.services.monitor.AntiGC)
>         at java.lang.Thread.run(Thread.java:595)
>
> "ActiveMQ Journal Checkpoint Worker" daemon prio=6 tid=0x27371c18 nid=0x878
> in Object.wait() [0x2752f000..0x2752faec]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05302da8> (a java.lang.Object)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:91)
>         - locked <0x05302da8> (a java.lang.Object)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner.access$000(DedicatedTaskRunner.java:24)
>         at
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:38)
>
> "RMI TCP Accept-0" daemon prio=6 tid=0x26eb2c68 nid=0xeb4 runnable
> [0x270af000..0x270afb6c]
>         at java.net.PlainSocketImpl.socketAccept(Native Method)
>         at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
>         - locked <0x0526a6d0> (a java.net.SocksSocketImpl)
>         at java.net.ServerSocket.implAccept(ServerSocket.java:450)
>         at java.net.ServerSocket.accept(ServerSocket.java:421)
>         at sun.rmi.transport.tcp.TCPTransport.run(TCPTransport.java:334)
>         at java.lang.Thread.run(Thread.java:595)
>
> "Timer-0" daemon prio=6 tid=0x26eac048 nid=0x88c in Object.wait()
> [0x2706f000..0x2706fbec]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x0526a7f0> (a java.util.TaskQueue)
>         at java.lang.Object.wait(Object.java:474)
>         at java.util.TimerThread.mainLoop(Timer.java:483)
>         - locked <0x0526a7f0> (a java.util.TaskQueue)
>         at java.util.TimerThread.run(Timer.java:462)
>
> "Low Memory Detector" daemon prio=6 tid=0x00a92520 nid=0xe48 runnable
> [0x00000000..0x00000000]
>
> "CompilerThread0" daemon prio=10 tid=0x00a90fa0 nid=0xc60 waiting on
> condition [0x00000000..0x26daf750]
>
> "Signal Dispatcher" daemon prio=10 tid=0x00a90288 nid=0xfd8 waiting on
> condition [0x00000000..0x00000000]
>
> "Finalizer" daemon prio=8 tid=0x00a87628 nid=0xf74 in Object.wait()
> [0x26d2f000..0x26d2f9ec]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x052514c0> (a java.lang.ref.ReferenceQueue$Lock)
>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
>         - locked <0x052514c0> (a java.lang.ref.ReferenceQueue$Lock)
>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
>         at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
>
> "Reference Handler" daemon prio=10 tid=0x00a86188 nid=0xa74 in Object.wait()
> [0x0099f000..0x0099faec]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x05251540> (a java.lang.ref.Reference$Lock)
>         at java.lang.Object.wait(Object.java:474)
>         at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
>         - locked <0x05251540> (a java.lang.ref.Reference$Lock)
>
> "main" prio=6 tid=0x00036c18 nid=0xf24 in Object.wait()
> [0x0007f000..0x0007fc40]
>         at java.lang.Object.wait(Native Method)
>         - waiting on <0x0545ae78> (a [Z)
>         at java.lang.Object.wait(Object.java:474)
>         at
> org.apache.activemq.console.command.StartCommand.waitForShutdown(StartCommand.java:106)
>         - locked <0x0545ae78> (a [Z)
>         at
> org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:67)
>         at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:49)
>         at
> org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:64)
>         at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:49)
>         at
> org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:45)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.activemq.console.Main.runTaskClass(Main.java:135)
>         at org.apache.activemq.console.Main.main(Main.java:67)
>
> "VM Thread" prio=10 tid=0x00a83750 nid=0xf54 runnable
>
> "VM Periodic Task Thread" prio=10 tid=0x26ebed28 nid=0x500 waiting on
> condition
> --
> View this message in context: http://www.nabble.com/Consumer-Deadlock-tf2014492.html#a5537293
> Sent from the ActiveMQ - User forum at Nabble.com.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/

Mime
View raw message