首先这个错误在tpreturn()的时候才发生; 
*
* If the service routine has not given us the
* same pointer back which we passed to it,
* then we actually have two buffers to free:
* The original buffer, and the buffer passed
* to tpreturn.
*/
if((TUX->_TUX__tmsysmsg != (TMMSG *) NULL) &&
(msgbuf != TUX->_TUX__tmsysmsg)) {
    /* User did not give us same buffer back */
    (void) _gp_bsizeof((char *) TUX->_TUX__tmsysmsg, &syssize);
    TUX->_TUX__tm_swindex = (short) TUX->_TUX__tmsysmsg->ltype_idx;
    if(_tmuninitbuf(getudata(TUX->_TUX__tmsysmsg),
    syssize - MHLEN(TUX->_TUX__tmsysmsg)) == -1) {
    (void) userlog(_MHS_(LIBTUX_CAT,1532,MHS_USERLOG,
    "ERROR: Type switch buffer uninitialization routine failure"));
    }
    MKRQTYPE(TUX->_TUX__tmsysmsg);
}