code: def on_service_modify(self, svc_ref, old_properties):
          
          with self._lock:
              if svc_ref not in self.services:
                  # A previously registered service now matches our filter
                  return self.on_service_arrival(svc_ref)
              else:
                  # Get the property values
                  service = self.services[svc_ref]
                  old_value = old_properties.get(self._key)
                  prop_value = svc_ref.get_property(self._key)
  
                  if old_value != prop_value:
                      # Key changed
                      if prop_value is not None or self._allow_none:
                          # New property accepted
                          if old_value is not None or self._allow_none:
                              self.__remove_service(old_value, service)
  
                          self.__store_service(prop_value, service)
  
                          # Notify the property modification, with a value change
                          self._ipopo_instance.update(
                              self, service, svc_ref, old_properties, True
                          )
                      else:
                          # Consider the service as gone
                          self.__remove_service(old_value, service)
                          del self.services[svc_ref]
                          self._ipopo_instance.unbind(self, service, svc_ref)
                  else:
                      # Simple property update
                      self._ipopo_instance.update(
                          self, service, svc_ref, old_properties, False
                      )
  
              return None
docs: Called when a service has been modified in the framework
  
          :param svc_ref: A service reference
          :param old_properties: Previous properties values
          :return: A tuple (added, (service, reference)) if the dependency has
                   been changed, else None