AnyDevice: Ensure non-existent devices are added to the device map #57
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The logic rework in ae76f68
introduced a subtle bug. If a FromDevice/ToDevice/ToHost element
uses ALLOW_NONEXISTENT true, AnyDevice::set_device() would fail
to enter the device into the AnyDeviceMap.
The problem is that set_device() assumes that since _dev == dev
(which will happen in the non-existent case since NULL == NULL)
this is a carrier change only, and it exits early without ever
entering the device in the map.
The previous implementation of AnyDevice::find_device() did not
have this problem, as it would insert the device unconditionally.
Check explicitly for this case (new device being inserted, and it
is a non-existent device, and it is not in the map already), and
add it to the map.
Signed-off-by: Kevin Paul Herbert kph@meraki.net