Skip to content

NH-2755 - LockMode hash differs in x86 and 64bit OS #1089

Closed
@nhibernate-bot

Description

@nhibernate-bot

Anton created an issue — 1st June 2011, 0:34:54:

When using LockMode over remoting between PCs with x86 and 64bit operating systems there is different result in GetHashCode.
It leads to error "LockMode Upgrade not supported by NHibernate.Persister.Entity.SingleTableEntityPersister " when I pass LockMode.Upgrade from x86 to 64bit to do

session.Lock(this, lockMode)

It is caused by generating and storing hash code upon creating instance of LockMode.
LockMode constructor uses a XOR (^) operand to generate and store hash code, and it has different behavior depends on OS type (x84, 64bit)


Anton added a comment — 1st June 2011, 0:39:02:

Here is callstack:

Server stack trace:
в NHibernate.Persister.Entity.AbstractEntityPersister.GetLocker(LockMode lockMode) в D:\Projects\NHibernate.trunk\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:строка 1730
в NHibernate.Persister.Entity.AbstractEntityPersister.Lock(Object id, Object version, Object obj, LockMode lockMode, ISessionImplementor session) в D:\Projects\NHibernate.trunk\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:строка 1734
в NHibernate.Event.Default.AbstractLockUpgradeEventListener.UpgradeLock(Object entity, EntityEntry entry, LockMode requestedLockMode, ISessionImplementor source) в D:\Projects\NHibernate.trunk\src\NHibernate\Event\Default\AbstractLockUpgradeEventListener.cs:строка 71
в NHibernate.Event.Default.DefaultLockEventListener.OnLock(LockEvent event) в D:\Projects\NHibernate.trunk\src\NHibernate\Event\Default\DefaultLockEventListener.cs:строка 55
в NHibernate.Impl.SessionImpl.FireLock(LockEvent lockEvent) в D:\Projects\NHibernate.trunk\src\NHibernate\Impl\SessionImpl.cs:строка 2520
в NHibernate.Impl.SessionImpl.Lock(Object obj, LockMode lockMode) в D:\Projects\NHibernate.trunk\src\NHibernate\Impl\SessionImpl.cs:строка 767


Fabio Maulo added a comment — 1st June 2011, 4:46:26:

and the exception message ?


Anton added a comment — 1st June 2011, 5:05:22:

It is in issue description :)
"LockMode Upgrade not supported by NHibernate.Persister.Entity.SingleTableEntityPersister"


Fabio Maulo added a comment — 1st June 2011, 6:03:22:

What you are doing is pass the NH's LockMode serializaed instance between 2 different machines, right ?


Anton added a comment — 1st June 2011, 6:44:51:

Yes, LockMode just passes from client to server PC, client is x86, server is 64bit.
When using client 64bit and server 64bit - everything ok.

Stored hashcode in instance of LockMode differs at 86/64


Fabio Maulo added a comment — 1st June 2011, 7:57:23:

Well... that is not the only one place where NH store the hash code at ctor.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions