In src.exec/dpexec/dxThreadMain.h, lock_type is defined as:
typedef volatile int lock_type
Then, throughout the code, it is used as:
DXlock(&lock,...)
where DXlock is defined (in src/exec/libdx/lock.c) as:
int DXlock(lock_type *l, int who) { struct _lock *_lock = *(struct _lock **)l;
So, we in fact cast an integer to a pointer - which does not work on 64-bit Linux, where an integer is still 32-bit.
Ooops.