在BEA Tuxedo中,在tpreturn之后调用tpfree是否有意义?

时间:2018-05-07 15:49:43

标签: c return tuxedo

我在目前正在使用的代码库中经常看到这种方式:

int obtained_number = 5;
char *answer = tpalloc(15);
sprintf(answer, "num:%d", obtained_number);
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);
tpfree(answer);//why?

根据documentation

  

tpreturn()就像C语言中的return语句一样(也就是说,当调用tpreturn()时,服务例程返回到BEA Tuxedo系统调度程序)。

如果是这样,我猜服务就在那时结束,永远不会调用tpfree()。再次调用服务时,它会再次在main方法中启动,而不是上次执行完成的位置。

这是对的吗?我是否应该报告tpfree()

的这种不必要的使用情况

1 个答案:

答案 0 :(得分:0)

tpreturn()实际执行longjmp(),并且在执行tpreturn()后没有代码。当再次调用服务时,它从服务功能的开始开始。

在你的情况下,这意味着tpfree()永远不会被执行而且它不应该--tpreturn()负责传递给它的缓冲区(释放,下一次调用的缓存等)。

C ++代码更糟糕的是

std::string obtained_str = "5";
char *answer = tpalloc(15);
sprintf(answer, "str:%s", obtained_str.c_str());
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);

将不会调用gets_str的析构函数,您将发生内存泄漏。