It's possible that the object has been added to weak map before and then
erased, so having an id property doesn't mean it's added in the weak map.
exports.add = (processId, routingId, obj) ->
# Some native objects may already been added to objectsWeakMap, be care not
# to add it twice.
- objectsWeakMap.add obj unless obj.id?
+ objectsWeakMap.add obj unless obj.id? and objectsWeakMap.has obj.id
# Store and reference the object, then return the storeId which points to
# where the object is stored. The caller can later dereference the object