/** "Remove matching deferred transmission entries." [DTN2] */ void remove_from_deferred(final Bundle bundle, int actions) { ContactManager cm = BundleDaemon.getInstance().contactmgr(); cm.get_lock().lock(); try { final LinkSet links = cm.links(); Iterator<Link> iter = links.iterator(); while (iter.hasNext()) { Link link = iter.next(); // "a bundle might be deleted immediately after being loaded // from storage, meaning that remove_from_deferred is called // before the deferred list is created (since the link isn't // fully set up yet). so just skip the link if there's no // router info, and therefore no deferred list" [DTN2] if (link.router_info() == null) { continue; } DeferredList deferred = deferred_list(link); ForwardingInfo info = deferred.find(bundle); if (info != null) { if ((info.action().getCode() & actions) > 0) { Log.d( TAG, String.format("removing bundle %s from link %s deferred list", bundle, link)); deferred.del(bundle); } } } } finally { cm.get_lock().unlock(); } }