ある処理の間はシグナルをブロックしたいので以下のようにしています。
struct sigaction sa;
sigset_t oldset;
sigempty(&sa.sa_mask);
sigaddset(&sa, SIGINT);
sigprocmask(SIG_BLOCK, &sa.sa_mask, oldset);

// ブロックさせたい処理

sigprocmask(SIG_UNBLOCK, oldset, (struct sigaction *)NULL);

しかしこれだと最後のsigprocmask()で失敗した場合、その後SIGINTを
ブロックしたままになってしまうと思うのですが、確実にSIGINTのブロックを
解除するにはどうすればよいでしょうか?