在 BEA Tuxedo 中,在 tpreturn 之后调用 tpfree 是否有意义?
In BEA Tuxedo does it make sense to call tpfree after tpreturn?
我在当前工作的代码库中经常看到这种方式:
int obtained_number = 5;
char *answer = tpalloc(15);
sprintf(answer, "num:%d", obtained_number);
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);
tpfree(answer);//why?
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 的析构函数将不会被调用,您将发生内存泄漏。
我在当前工作的代码库中经常看到这种方式:
int obtained_number = 5;
char *answer = tpalloc(15);
sprintf(answer, "num:%d", obtained_number);
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);
tpfree(answer);//why?
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 的析构函数将不会被调用,您将发生内存泄漏。