* Return: boolean indicating whether any messages in the designated
  *         channel/queue are present
  */
+
+static bool
+queue_empty(struct visorchannel *channel, u32 queue)
+{
+       struct signal_queue_header sig_hdr;
+
+       if (sig_read_header(channel, queue, &sig_hdr))
+               return true;
+
+       return (sig_hdr.head == sig_hdr.tail);
+}
+
 bool
 visorchannel_signalempty(struct visorchannel *channel, u32 queue)
 {
-       unsigned long flags = 0;
-       struct signal_queue_header sig_hdr;
-       bool rc = false;
+       bool rc;
+       unsigned long flags;
 
-       if (channel->needs_lock)
-               spin_lock_irqsave(&channel->remove_lock, flags);
+       if (!channel->needs_lock)
+               return queue_empty(channel, queue);
 
-       if (sig_read_header(channel, queue, &sig_hdr))
-               rc = true;
-       if (sig_hdr.head == sig_hdr.tail)
-               rc = true;
-       if (channel->needs_lock)
-               spin_unlock_irqrestore(&channel->remove_lock, flags);
+       spin_lock_irqsave(&channel->remove_lock, flags);
+       rc = queue_empty(channel, queue);
+       spin_unlock_irqrestore(&channel->remove_lock, flags);
 
        return rc;
 }