def set_ref(self, value):
     if value:
         if not self._flags & 4:
             return  # ref is already True
         if self._flags & 2:  # ev_unref was called, undo
             libev.ev_ref(self.loop._ptr)
         self._flags &= ~6  # do not want unref, no outstanding unref
     else:
         if self._flags & 4:
             return  # ref is already False
         self._flags |= 4
         if not self._flags & 2 and libev.ev_is_active(pointer(self._watcher_struct)):
             libev.ev_unref(self.loop._ptr)
             self._flags |= 2
 def _libev_unref(self):
     libev.ev_unref(self.loop._ptr)
     self._flags |= 2
 def unref(self):
     libev.ev_unref(self._ptr)