|
@@ -4043,8 +4043,8 @@ public:
|
|
|
{ return c->getAbortTimeStamp(); }
|
|
|
|
|
|
|
|
|
- virtual void clearExceptions()
|
|
|
- { c->clearExceptions(); }
|
|
|
+ virtual void clearExceptions(const char *source=nullptr)
|
|
|
+ { c->clearExceptions(source); }
|
|
|
virtual void commit()
|
|
|
{ c->commit(); }
|
|
|
virtual IWUException * createException()
|
|
@@ -8896,7 +8896,7 @@ unsigned CLocalWorkUnit::getExceptionCount() const
|
|
|
return exceptions.length();
|
|
|
}
|
|
|
|
|
|
-void CLocalWorkUnit::clearExceptions()
|
|
|
+void CLocalWorkUnit::clearExceptions(const char *source)
|
|
|
{
|
|
|
CriticalBlock block(crit);
|
|
|
// For this to be legally called, we must have the write-able interface. So we are already locked for write.
|
|
@@ -8906,8 +8906,16 @@ void CLocalWorkUnit::clearExceptions()
|
|
|
IWUException &e = exceptions.item(idx);
|
|
|
SCMStringBuffer s;
|
|
|
e.getExceptionSource(s);
|
|
|
- if (strieq(s.s, "eclcc") || strieq(s.s, "eclccserver") || strieq(s.s, "eclserver") )
|
|
|
- break;
|
|
|
+ if (source)
|
|
|
+ {
|
|
|
+ if (!strieq(s.s, source))
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (strieq(s.s, "eclcc") || strieq(s.s, "eclccserver") || strieq(s.s, "eclserver") )
|
|
|
+ break;
|
|
|
+ }
|
|
|
VStringBuffer xpath("Exceptions/Exception[@sequence='%d']", e.getSequence());
|
|
|
p->removeProp(xpath);
|
|
|
exceptions.remove(idx);
|