anchor.diff:      final String message;
       /** The max count that was exceeded. */
       final num count;
  +    /** Path of lock. */
  +    final String path;
   
  -    LockException(this.message, [this.count]);
  +    LockException(this.message, this.count, this.path);
   
       String toString() {
  -      if (message != null) {
  -        if (count != null) return "LockException after $count trials: $message";
  -        return "LockException: $message";
  -      }
  -      if (count != null) return "LockException after $count trials";
  -      return "LockException";
  +      String str = "LockException: could not obtain lock at path $path after "
  +                   "$count trials.";
  +      if (message != null) str = "$str\n$message";
  +      return str;
       }
   
   }
  
positive.code:   return runZoned(() => _runWithLock(path, callback, tryInterval, maxTrials),
                                       onError: (e, s) {
      freeLock(path);
      logger.info('Error executing callback.', e, s);
      throw e;
      exit(1);
    });
  }
negative.code:       trials++;
        if (trials == maxTrials) {
          timer.cancel();
          completer.completeError(
              new LockException(null, trials, path));
        }
      }
    }
  