c - 在 BEA Tuxedo 中,在 tpreturn 之后调用 tpfree 有意义吗?

标签 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() acts like a return statement in the C language (that is, when tpreturn() is called, the service routine returns to the BEA Tuxedo system dispatcher).

如果是这样,我想服务将在此时完成,并且永远不会调用 tpfree() 。当再次调用该服务时,它会再次在 main 方法中启动,而不是上次执行完毕的地方。

这是正确的吗?我应该报告这种不必要的 tpfree() 使用吗?

最佳答案

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);

obtained_str 的析构函数不会被调用,并且会出现内存泄漏。

关于c - 在 BEA Tuxedo 中,在 tpreturn 之后调用 tpfree 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218048/

相关文章:

android - 如何在Android上执行obj文件

C free char* 在堆上分配

c - C 中的段错误 11 在排序列表中插入节点

c - 堆栈上的运行时内存分配

c++ - 特殊学校代码处理函数和返回值问题

c - 在多线程程序中调用 tpinit 和 tpterm 函数时速度缓慢

c++ - 拦截 C++ 方法调用(Tuxedo、tpcall)

c - 变量返回还是直接返回?

javascript 无法启动函数或返回结果

java - JAVA 中 Tuxedo 调用的自定义适配器