История изменений
Исправление wandrien, (текущая версия) :
Ну трейд-оффы вполне понятны: случайно поставленный return может всё сломать.
Кстати, это решаемо.
int foo()
{
#define return RETURN_NOT_ALLOWED
int status;
MyType * x = (MyType *) malloc(sizeof(MyType));
lock(global_lock);
.
.
.
cleanup:
unlock(global_lock);
free(x);
#undef return
return status;
}
Исправление wandrien, :
Ну трейд-оффы вполне понятны: случайно поставленный return может всё сломать.
Кстати, это решаемо.
int foo()
{
#define return RETURN_NOT_ALLOWED
int status;
MyType * x = (MyType *) malloc(sizeof(MyType));
lock(global_lock);
.
.
.
cleanup:
unlock(global_lock);
if (x)
free(x);
#undef return
return status;
}
Исходная версия wandrien, :
Ну трейд-оффы вполне понятны: случайно поставленный return может всё сломать.
Кстати, это решаемо.
int foo() { #define return RETURN_NOT_ALLOWED int status; MyType * x = (MyType *) malloc(sizeof(MyType)); lock(global_lock); . . . cleanup: unlock(global_lock); if (x) free(x); #undef return return status; }