jtu...@objektfabrik.de
unread,Oct 13, 2011, 7:46:37 AM10/13/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to va-sma...@googlegroups.com
Hi there,
Ever since I am using GLORP for my Seaside based work in VAST, I am getting into trouble with Session cleanup in GLORP.
What happens?
If a Seaside session expires, it is not instantly cleaned up. It will be cleaned up when a new one is created. So after my (not in production yet) application has been inactive for a while, the first access to the DB with GLORP results in a
Primitive failed in: PlatformFunction>>#callWithArguments: due to General protection fault - read from invalid memory location
The called primitive is: <c: int16 'odbc32':SQLEndTran uint16 uint32 uint16>
And here is the relevant part of the Stack Trace:
PlatformFunction>>#callWithArray:
self=<c: int16 'odbc32':SQLEndTran uint16 uint32 uint16>
parmArray=(2 24960872 1)
AbtOdbcDatabaseManager>>#callPlatformFunction:withArray:useThreadPreference:threadKey:
self=an AbtOdbcDatabaseManager
aFunction=56
anArray=(2 24960872 1)
aBool=true
aThreadKey=an AbtWorkQueue
rc=nil
workQueue=an AbtWorkQueue
AbtOdbc30DatabaseConnection(AbtDatabaseConnection)>>#callPlatformFunction:withArray:useThreadPreference:threadKey:
self=an AbtOdbc30DatabaseConnection
aFunction=56
anArray=(2 24960872 1)
aBool=true
aThreadKey=an AbtWorkQueue
AbtOdbc30DatabaseConnection>>#rollbackTransactionIfError:
self=an AbtOdbc30DatabaseConnection
anErrorBlock=[] in VADatabaseAccessor>>#loginIfError:
rc=nil
AbtOdbc30DatabaseConnection(AbtOdbcDatabaseConnection)>>#rollbackUnitOfWorkIfError:
self=an AbtOdbc30DatabaseConnection
anErrorBlock=[] in VADatabaseAccessor>>#loginIfError:
AbtOdbc30DatabaseConnection(AbtDatabaseConnection)>>#rollbackUnitOfWork
self=an AbtOdbc30DatabaseConnection
VADatabaseAccessor>>#rollbackTransaction
self=a VADatabaseAccessor
[] in GlorpSession>>#rollbackTransaction
self=a GlorpSession
My guess is that there is some problem between GLORP and the ODBC library because the connection that was used by the GLORP session is invalid in the meantime. And that is probably my fault, because I should check for *something* before I rollback my Transactions. But as I said, the point in time when this happens is determined by Seaside, and I have little chance to influence this.
What can I do to check if there is something that can be rolled back "after such a long time" (we're speaking of 10, 15 or 20 minutes of inactivity)? And what about the OS resources? Do I have an obligation and chance to clean something up?
It's no problem to terminate the process and click again, everything works fine after this error: a new GLORP session is established and the application works like a charm. Until a session gets cleaned up after a long time again...
Sorry if this question is a bit open and blurry.
Any pointers are welcome!
Joachim