LINUX.ORG.RU

История изменений

Исправление 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; }