Kbase P17639: Error 49; utfree() and qrClearQuery() in the stack trace.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Unverified
SYMPTOM(s):
Running a query on a remote client crashes the remote server with error 49.
SYSTEM ERROR: Memory violation. (49)
Stack trace from _mprosrv reads:
utfree
stfree
qrClearQuery
qrdlc
CAUSE:
Bug# 20020805-012
CAUSE:
Bug# 20020812-018
CAUSE:
This is a know issue.
A very specific, valid physical record layout is not interpreted correctly by the remote server; this problem only occurs if the physical record layout is from a schema version different from the current one.
What happens is that the schema versioning routine kicks in to bring the "old" physical layout in sync with the current schema version, but the remote server then allocates the wrong amount of memory for the buffer which has to actually host the record in memory. As a consequence some memory locations are overwritten when the record is read into that buffer, and the remote server will eventually crash.
FIX:
The offending record can be brought in sync with the current schema version by updating it via a self-service client with a program along the following lines:
DEF VAR memState LIKE customer.state.
DO TRANSACTION:
FIND customer WHERE RECID(customer) = <offending RECID> EXCLUSIVE-LOCK.
memState = customer.state.
/* Write a value different from the current one. */
customer.state = "Whatever ...".
END.
DO TRANSACTION:
FIND customer WHERE RECID(customer) = <offending RECID> EXCLUSIVE-LOCK.
/* Restore the old value into the record field. */
customer.state = memState.
END.
Because the record is now physically upgraded to the current schema version, the schema versioning routine will not kick in when the record is read by the remote server, and the memory allocation routines will work as expected.
Alternatively you can upgrade to 9.1D02 or later, where this problem has been solved.