Instrução na macro C ++

Lendo código de cromo, foi encontrada uma macro útil para lidar com erros de EINTR de chamadas do sistema em sistemas compatíveis com POSIX. Aqui está o código (base / posix / eintr_wrapper.h):

#define HANDLE_EINTR(x) ({ \
  decltype(x) eintr_wrapper_result; \
  do { \
    eintr_wrapper_result = (x); \
  } while (eintr_wrapper_result == -1 && errno == EINTR); \
  eintr_wrapper_result; \
})

A questão é qual é o papel da última declaração na macroeintr_wrapper_result; ? Se usarmos vírgulas em vez de ponto e vírgula - ficará claro - para retornar o resultado da última operação (operador de vírgula). Mas qual é o objetivo nesse caso?

questionAnswers(1)

yourAnswerToTheQuestion