Skip to content

Question about SerialDisposable #686

@DevAndArtist

Description

@DevAndArtist

I'm currently learning the project while trying to understand every single bit of it.

As far as I understood the design of Disposable types included in the Disposable.swift file, I think I might have found a small issue (maybe harmless, but potentially a bug?).

For example CompositeDisposable will clear the Atomic's value and potentially remove all the retained references to the Disposable objects. Then if you try to add a new disposable to the CompositeDisposable, but the CompositeDisposable itself is already disposed, it will dispose the passed Disposable and reject retaining the reference into the bag.

Now if I compare that behavior with SerialDisposable, the dispose() method does the same. However the setter on the inner property does not reject the value if the SerialDisposable is already disposed, but retains the reference.

Is this by design or just overlooked?

I thought it would be more like this:

set(disposable) {
+  if isDisposed {
+    disposable?.dispose() // Dispose and do not retain
+  } else {
    _inner.swap(disposable)?.dispose()
+  }
-
-  if let disposable = disposable, isDisposed {
-    disposable.dispose()
-  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions