Skip to main content



      Home
Home » Modeling » GMF (Graphical Modeling Framework) » Deadlocks occur after a TransactionalEditingDomain.runExclusive(...) call was interupted
Deadlocks occur after a TransactionalEditingDomain.runExclusive(...) call was interupted [message #152613] Sat, 29 September 2007 12:17 Go to next message
Eclipse UserFriend
Hi EMF-Team and GMF-Team!

I have a GMF editor and in conjunction with oAW the model is
validated.

To execute the validation routines runExclusive(...) is called
on the TransactionalEditingDomain which holds the model.

I get deadlocks between threads which apparently all access
the same TransactionalEditingDomain.

Depending on the user actions the runExclusive(...) call to
execute my validation routines is interrupted. (An
InterruptedException is thrown.)
After this has happened at least once I get a deadlock which
results in a dialog to pop up:
<http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png>

Apparently there is a thread besides my own thread which
alsoaccesses the same TransactionalEditingDomain. This thread is
blocked if my thread was interrupted before.

I wonder which thread that could be?
And why is it blocked if and only if my thread was interrupted
before?

Any ideas?
Nicolai

P.S.: Sorry, but I posted on the EMF and the GMF newsgroup to
get answers from both points of view.


--

I'm trying a new usenet client for Mac, Nemo OS X.
You can download it at http://www.malcom-mac.com/nemo
Re: Deadlocks occur after a TransactionalEditingDomain.runExclusive(...) call was interupted [message #152621 is a reply to message #152613] Sat, 29 September 2007 12:37 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

This is a multi-part message in MIME format.
--------------010905060601050404060609
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Nicolai,

Maybe you could use this information to figure out what all the threads
are doing when the deadlock occurs.

http://wiki.eclipse.org/index.php/How_to_report_a_deadlock



Nicolai Kamenzky wrote:
> Hi EMF-Team and GMF-Team!
>
> I have a GMF editor and in conjunction with oAW the model is
> validated.
>
> To execute the validation routines runExclusive(...) is called
> on the TransactionalEditingDomain which holds the model.
>
> I get deadlocks between threads which apparently all access
> the same TransactionalEditingDomain.
>
> Depending on the user actions the runExclusive(...) call to
> execute my validation routines is interrupted. (An
> InterruptedException is thrown.)
> After this has happened at least once I get a deadlock which
> results in a dialog to pop up:
> <http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png>
>
> Apparently there is a thread besides my own thread which
> alsoaccesses the same TransactionalEditingDomain. This thread is
> blocked if my thread was interrupted before.
>
> I wonder which thread that could be?
> And why is it blocked if and only if my thread was interrupted
> before?
>
> Any ideas?
> Nicolai
>
> P.S.: Sorry, but I posted on the EMF and the GMF newsgroup to
> get answers from both points of view.
>
>
>


--------------010905060601050404060609
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Nicolai,<br>
<br>
Maybe you could use this information to figure out what all the threads
are doing when the deadlock occurs.<br>
<blockquote><a
href="http://wiki.eclipse.org/index.php/How_to_report_a_deadlock">http://wiki.eclipse.org/index.php/How_to_report_a_deadlock</a><br>
</blockquote>
<br>
<br>
Nicolai Kamenzky wrote:
<blockquote cite="mid:nemoSat092907055426@news.eclipse.org" type="cite">
<pre wrap="">Hi EMF-Team and GMF-Team!

I have a GMF editor and in conjunction with oAW the model is
validated.

To execute the validation routines runExclusive(...) is called
on the TransactionalEditingDomain which holds the model.

I get deadlocks between threads which apparently all access
the same TransactionalEditingDomain.

Depending on the user actions the runExclusive(...) call to
execute my validation routines is interrupted. (An
InterruptedException is thrown.)
After this has happened at least once I get a deadlock which
results in a dialog to pop up:
<a class="moz-txt-link-rfc2396E" href="http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png">&lt; http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png& ;gt;</a>

Apparently there is a thread besides my own thread which
alsoaccesses the same TransactionalEditingDomain. This thread is
blocked if my thread was interrupted before.

I wonder which thread that could be?
And why is it blocked if and only if my thread was interrupted
before?

Any ideas?
Nicolai

P.S.: Sorry, but I posted on the EMF and the GMF newsgroup to
get answers from both points of view.


</pre>
</blockquote>
<br>
</body>
</html>

--------------010905060601050404060609--
Re: Deadlocks occur after a TransactionalEditingDomain.runExclusive(...) call was interupted [message #152630 is a reply to message #152621] Sat, 29 September 2007 15:10 Go to previous messageGo to next message
Eclipse UserFriend
Thanks Ed!

I compared the threads while working correctly and while hanging.

Like you see in this picture:
<http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png>
I found three worker threads waiting:

"Worker-0" prio=5 tid=0x0052d110 nid=0x1f93400 in Object.wait()
[0xb069e000..0xb069ed10] at java.lang.Object.wait(Native Method)
- waiting on <0x06639b48> (a
org.eclipse.emf.transaction.util.Queue$Wait) at
org.eclipse.emf.transaction.util.Queue$Wait.waitFor(Queue.ja va:322)
- locked <0x06639b48> (a
org.eclipse.emf.transaction.util.Queue$Wait) at
org.eclipse.emf.transaction.util.Lock.acquire(Lock.java:273)
at
org.eclipse.emf.transaction.util.Lock$AcquireJob.run(Lock.ja va:739)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

I printed only one of them because their stack is exactly the
same. Unfortunately I still can't see which kind of thread
theyreally are. Two of those three are definitely my own threads
which
do the validation. I could execute just one validation thread
but the outcome is still the same.

I still don't know for which purpose the third thread is which is
(I think) represented in the dialog as "Waiting User Operation".

A big difference I found in the main thread. While hanging its
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2390)is
not idling but waiting whereelse:

"main" prio=6 tid=0x005013b0 nid=0xa000d000 in Object.wait()
[0xbfffb000..0xbfffe65c] at java.lang.Object.wait(Native Method)
- waiting on <0x08271ea8> (a java.lang.Object)
at
org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.j ava:189)
- locked <0x08271ea8> (a java.lang.Object)
at
org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJo bs.java:8
7) at
org.eclipse.core.internal.jobs.JobManager.beginRule(JobManag er.java:2
25) at
org.eclipse.emf.transaction.util.Lock.uiSafeAcquire(Lock.jav a:404)
at
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.acqui
re(TransactionalEditingDomainImpl.java:512) at
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.activ
ate(TransactionalEditingDomainImpl.java:440) at
org.eclipse.emf.transaction.impl.TransactionImpl.start(Trans actionImp
l.java:196) - locked <0x0661ebc0> (a
org.eclipse.emf.transaction.impl.TransactionImpl) at
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.start
Transaction(TransactionalEditingDomainImpl.java:356) at
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.runEx
clusive(TransactionalEditingDomainImpl.java:255) at
org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.getCom
mand(GraphicalEditPart.java:458) at
org.eclipse.gmf.runtime.diagram.ui.internal.actions.InsertAc tion.crea
teInsertCommand(InsertAction.java:83) at
org.eclipse.gmf.runtime.diagram.ui.internal.actions.InsertAc tion.calc
ulateEnabled(InsertAction.java:94) at
org.eclipse.gef.ui.actions.WorkbenchPartAction.refresh(Workb enchPartA
ction.java:119) at
org.eclipse.gef.ui.actions.SelectionAction.handleSelectionCh anged(Sel
ectionAction.java:85) at
org.eclipse.gef.ui.actions.SelectionAction.setSelection(Sele ctionActi
on.java:96) at
org.eclipse.gef.ui.actions.SelectionAction.update(SelectionA ction.jav
a:117) at
org.eclipse.gef.ui.parts.GraphicalEditor.updateActions(Graph icalEdito
r.java:414) at
org.eclipse.gef.ui.parts.GraphicalEditor.selectionChanged(Gr aphicalEd
itor.java:366) at
org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.Di agramDocu
mentEditor.selectionChanged(DiagramDocumentEditor.java:276) at
org.eclipse.ui.internal.AbstractSelectionService.fireSelecti on(Abstra
ctSelectionService.java:156) at
org.eclipse.ui.internal.AbstractSelectionService.setActivePa rt(Abstra
ctSelectionService.java:282) at
org.eclipse.ui.internal.WWinPartService.updateActivePart(WWi nPartServ
ice.java:125) at
org.eclipse.ui.internal.WWinPartService.access$0(WWinPartSer vice.java
:115) at
org.eclipse.ui.internal.WWinPartService$1.partDeactivated(WW inPartSer
vice.java:48) at
org.eclipse.ui.internal.PartListenerList2$4.run(PartListener List2.jav
a:113) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.runtime.Platform.run(Platform.java:857)
at
org.eclipse.ui.internal.PartListenerList2.fireEvent(PartList enerList2
java:53) at
org.eclipse.ui.internal.PartListenerList2.firePartDeactivate d(PartLis
tenerList2.java:111) at
org.eclipse.ui.internal.PartService.firePartDeactivated(Part Service.j
ava:116) at
org.eclipse.ui.internal.PartService.setActivePart(PartServic e.java:16
5) at
org.eclipse.ui.internal.WorkbenchPagePartList.fireActivePart Changed(W
orkbenchPagePartList.java:56) at
org.eclipse.ui.internal.PartList.setActivePart(PartList.java :126)
at
org.eclipse.ui.internal.WorkbenchPage.setActivePart(Workbenc hPage.jav
a:3384) at
org.eclipse.ui.internal.WorkbenchPage.activate(WorkbenchPage .java:602
) at
org.eclipse.ui.internal.WorkbenchPage.makeActive(WorkbenchPa ge.java:1
184) at
org.eclipse.ui.internal.WorkbenchPage.updateActivePart(Workb enchPage.
java:1164) at
org.eclipse.ui.internal.WorkbenchPage.handleDeferredEvents(W orkbenchP
age.java:1340) at
org.eclipse.ui.internal.WorkbenchPage.deferUpdates(Workbench Page.java
:1329) at
org.eclipse.ui.internal.WorkbenchPage.closeEditors(Workbench Page.java
:1303) at
org.eclipse.ui.internal.WorkbenchPage.closeEditor(WorkbenchP age.java:
1358) at
org.eclipse.ui.internal.EditorPane.doHide(EditorPane.java:61 )
at org.eclipse.ui.internal.PartStack.close(PartStack.java:543)
at org.eclipse.ui.internal.EditorStack.close(EditorStack.java:2 06)
at org.eclipse.ui.internal.PartStack$1.close(PartStack.java:122 )
at
org.eclipse.ui.internal.presentations.util.TabbedStackPresen tation$1.
handleEvent(TabbedStackPresentation.java:81) at
org.eclipse.ui.internal.presentations.util.AbstractTabFolder .fireEven
t(AbstractTabFolder.java:267) at
org.eclipse.ui.internal.presentations.util.AbstractTabFolder .fireEven
t(AbstractTabFolder.java:276) at
org.eclipse.ui.internal.presentations.defaultpresentation.De faultTabF
older.access$1(DefaultTabFolder.java:1) at
org.eclipse.ui.internal.presentations.defaultpresentation.De faultTabF
older$1.closeButtonPressed(DefaultTabFolder.java:67) at
org.eclipse.ui.internal.presentations.PaneFolder.notifyClose Listeners
(PaneFolder.java:596) at
org.eclipse.ui.internal.presentations.PaneFolder$3.close(Pan eFolder.j
ava:189) at
org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:21 59) at
org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.j ava:320)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1495)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1519)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1504)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1 295)
at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:3348)
at
org.eclipse.swt.widgets.Control.sendTrackEvents(Control.java :2815)
at
org.eclipse.swt.widgets.Control.kEventControlTrack(Control.j ava:1953)
at org.eclipse.swt.widgets.Widget.controlProc(Widget.java:367)
at org.eclipse.swt.widgets.Display.controlProc(Display.java:835 )
at org.eclipse.swt.internal.carbon.OS.SendEventToEventTarget(Na tive
Method) at
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2936)
at
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2389)
at ...


Any ideas?
Your help is highly appreciated!

Nicolai


--

I'm trying a new usenet client for Mac, Nemo OS X.
You can download it at http://www.malcom-mac.com/nemo
Re: Deadlocks occur after a TransactionalEditingDomain.runExclusive(...) call was interupted [message #152645 is a reply to message #152630] Sat, 29 September 2007 15:39 Go to previous message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

Nicolai,

Likely Christian will have some ideas on Monday...


Nicolai Kamenzky wrote:
> Thanks Ed!
>
> I compared the threads while working correctly and while hanging.
>
> Like you see in this picture:
> <http://page.mi.fu-berlin.de/kamenzky/forum/a/editing.png>
> I found three worker threads waiting:
>
> "Worker-0" prio=5 tid=0x0052d110 nid=0x1f93400 in Object.wait()
> [0xb069e000..0xb069ed10] at java.lang.Object.wait(Native Method)
> - waiting on <0x06639b48> (a
> org.eclipse.emf.transaction.util.Queue$Wait) at
> org.eclipse.emf.transaction.util.Queue$Wait.waitFor(Queue.ja va:322)
> - locked <0x06639b48> (a
> org.eclipse.emf.transaction.util.Queue$Wait) at
> org.eclipse.emf.transaction.util.Lock.acquire(Lock.java:273)
> at
> org.eclipse.emf.transaction.util.Lock$AcquireJob.run(Lock.ja va:739)
> at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
>
> I printed only one of them because their stack is exactly the
> same. Unfortunately I still can't see which kind of thread
> theyreally are. Two of those three are definitely my own threads
> which
> do the validation. I could execute just one validation thread
> but the outcome is still the same.
>
> I still don't know for which purpose the third thread is which is
> (I think) represented in the dialog as "Waiting User Operation".
>
> A big difference I found in the main thread. While hanging its
> org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2390)is
> not idling but waiting whereelse:
>
> "main" prio=6 tid=0x005013b0 nid=0xa000d000 in Object.wait()
> [0xbfffb000..0xbfffe65c] at java.lang.Object.wait(Native Method)
> - waiting on <0x08271ea8> (a java.lang.Object)
> at
> org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.j ava:189)
> - locked <0x08271ea8> (a java.lang.Object)
> at
> org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJo bs.java:8
> 7) at
> org.eclipse.core.internal.jobs.JobManager.beginRule(JobManag er.java:2
> 25) at
> org.eclipse.emf.transaction.util.Lock.uiSafeAcquire(Lock.jav a:404)
> at
> org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.acqui
> re(TransactionalEditingDomainImpl.java:512) at
> org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.activ
> ate(TransactionalEditingDomainImpl.java:440) at
> org.eclipse.emf.transaction.impl.TransactionImpl.start(Trans actionImp
> l.java:196) - locked <0x0661ebc0> (a
> org.eclipse.emf.transaction.impl.TransactionImpl) at
> org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.start
> Transaction(TransactionalEditingDomainImpl.java:356) at
> org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.runEx
> clusive(TransactionalEditingDomainImpl.java:255) at
> org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.getCom
> mand(GraphicalEditPart.java:458) at
> org.eclipse.gmf.runtime.diagram.ui.internal.actions.InsertAc tion.crea
> teInsertCommand(InsertAction.java:83) at
> org.eclipse.gmf.runtime.diagram.ui.internal.actions.InsertAc tion.calc
> ulateEnabled(InsertAction.java:94) at
> org.eclipse.gef.ui.actions.WorkbenchPartAction.refresh(Workb enchPartA
> ction.java:119) at
> org.eclipse.gef.ui.actions.SelectionAction.handleSelectionCh anged(Sel
> ectionAction.java:85) at
> org.eclipse.gef.ui.actions.SelectionAction.setSelection(Sele ctionActi
> on.java:96) at
> org.eclipse.gef.ui.actions.SelectionAction.update(SelectionA ction.jav
> a:117) at
> org.eclipse.gef.ui.parts.GraphicalEditor.updateActions(Graph icalEdito
> r.java:414) at
> org.eclipse.gef.ui.parts.GraphicalEditor.selectionChanged(Gr aphicalEd
> itor.java:366) at
> org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.Di agramDocu
> mentEditor.selectionChanged(DiagramDocumentEditor.java:276) at
> org.eclipse.ui.internal.AbstractSelectionService.fireSelecti on(Abstra
> ctSelectionService.java:156) at
> org.eclipse.ui.internal.AbstractSelectionService.setActivePa rt(Abstra
> ctSelectionService.java:282) at
> org.eclipse.ui.internal.WWinPartService.updateActivePart(WWi nPartServ
> ice.java:125) at
> org.eclipse.ui.internal.WWinPartService.access$0(WWinPartSer vice.java
> :115) at
> org.eclipse.ui.internal.WWinPartService$1.partDeactivated(WW inPartSer
> vice.java:48) at
> org.eclipse.ui.internal.PartListenerList2$4.run(PartListener List2.jav
> a:113) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
> at org.eclipse.core.runtime.Platform.run(Platform.java:857)
> at
> org.eclipse.ui.internal.PartListenerList2.fireEvent(PartList enerList2
> java:53) at
> org.eclipse.ui.internal.PartListenerList2.firePartDeactivate d(PartLis
> tenerList2.java:111) at
> org.eclipse.ui.internal.PartService.firePartDeactivated(Part Service.j
> ava:116) at
> org.eclipse.ui.internal.PartService.setActivePart(PartServic e.java:16
> 5) at
> org.eclipse.ui.internal.WorkbenchPagePartList.fireActivePart Changed(W
> orkbenchPagePartList.java:56) at
> org.eclipse.ui.internal.PartList.setActivePart(PartList.java :126)
> at
> org.eclipse.ui.internal.WorkbenchPage.setActivePart(Workbenc hPage.jav
> a:3384) at
> org.eclipse.ui.internal.WorkbenchPage.activate(WorkbenchPage .java:602
> ) at
> org.eclipse.ui.internal.WorkbenchPage.makeActive(WorkbenchPa ge.java:1
> 184) at
> org.eclipse.ui.internal.WorkbenchPage.updateActivePart(Workb enchPage.
> java:1164) at
> org.eclipse.ui.internal.WorkbenchPage.handleDeferredEvents(W orkbenchP
> age.java:1340) at
> org.eclipse.ui.internal.WorkbenchPage.deferUpdates(Workbench Page.java
> :1329) at
> org.eclipse.ui.internal.WorkbenchPage.closeEditors(Workbench Page.java
> :1303) at
> org.eclipse.ui.internal.WorkbenchPage.closeEditor(WorkbenchP age.java:
> 1358) at
> org.eclipse.ui.internal.EditorPane.doHide(EditorPane.java:61 )
> at org.eclipse.ui.internal.PartStack.close(PartStack.java:543)
> at org.eclipse.ui.internal.EditorStack.close(EditorStack.java:2 06)
> at org.eclipse.ui.internal.PartStack$1.close(PartStack.java:122 )
> at
> org.eclipse.ui.internal.presentations.util.TabbedStackPresen tation$1.
> handleEvent(TabbedStackPresentation.java:81) at
> org.eclipse.ui.internal.presentations.util.AbstractTabFolder .fireEven
> t(AbstractTabFolder.java:267) at
> org.eclipse.ui.internal.presentations.util.AbstractTabFolder .fireEven
> t(AbstractTabFolder.java:276) at
> org.eclipse.ui.internal.presentations.defaultpresentation.De faultTabF
> older.access$1(DefaultTabFolder.java:1) at
> org.eclipse.ui.internal.presentations.defaultpresentation.De faultTabF
> older$1.closeButtonPressed(DefaultTabFolder.java:67) at
> org.eclipse.ui.internal.presentations.PaneFolder.notifyClose Listeners
> (PaneFolder.java:596) at
> org.eclipse.ui.internal.presentations.PaneFolder$3.close(Pan eFolder.j
> ava:189) at
> org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:21 59) at
> org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.j ava:320)
> at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1495)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1519)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1504)
> at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1 295)
> at
> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:3348)
> at
> org.eclipse.swt.widgets.Control.sendTrackEvents(Control.java :2815)
> at
> org.eclipse.swt.widgets.Control.kEventControlTrack(Control.j ava:1953)
> at org.eclipse.swt.widgets.Widget.controlProc(Widget.java:367)
> at org.eclipse.swt.widgets.Display.controlProc(Display.java:835 )
> at org.eclipse.swt.internal.carbon.OS.SendEventToEventTarget(Na tive
> Method) at
> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2936)
> at
> org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2389)
> at ...
>
>
> Any ideas?
> Your help is highly appreciated!
>
> Nicolai
>
>
>
Previous Topic:Custom ChildAccess?
Next Topic:[Announce] GMF 2.0.1 is available
Goto Forum:
  


Current Time: Tue Jul 15 23:05:04 EDT 2025

Powered by FUDForum. Page generated in 0.07384 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top