In your gist, you're not using the channel.lock itself. Try to lock/unlock (or acquire/release?) when reading or writing to channel.list.
You can also try separate lock for fetching and assigning the channel to the list, but using the same lock for fetching/assigning channel should be simpler.
