-#define td_clear_error(td) \
- (td)->error = 0;
-#define td_verror(td, err, func) \
- __td_verror((td), (err), strerror((err)), (func))
-#define td_vmsg(td, err, msg, func) \
- __td_verror((td), (err), (msg), (func))
+#define td_clear_error(td) do { \
+ (td)->error = 0; \
+ if ((td)->parent) \
+ (td)->parent->error = 0; \
+} while (0)
+
+#define td_verror(td, err, func) do { \
+ __td_verror((td), (err), strerror((err)), (func)); \
+ if ((td)->parent) \
+ __td_verror((td)->parent, (err), strerror((err)), (func)); \
+} while (0)
+
+#define td_vmsg(td, err, msg, func) do { \
+ __td_verror((td), (err), (msg), (func)); \
+ if ((td)->parent) \
+ __td_verror((td)->parent, (err), (msg), (func)); \
+} while (0)