service = handle_to_service(handle);
        if (service && (service->srvstate != VCHIQ_SRVSTATE_FREE) &&
                (service->handle == handle)) {
-               BUG_ON(service->ref_count == 0);
+               WARN_ON(service->ref_count == 0);
                service->ref_count++;
        } else
                service = NULL;
                spin_lock(&service_spinlock);
                service = state->services[localport];
                if (service && (service->srvstate != VCHIQ_SRVSTATE_FREE)) {
-                       BUG_ON(service->ref_count == 0);
+                       WARN_ON(service->ref_count == 0);
                        service->ref_count++;
                } else
                        service = NULL;
        if (service && (service->srvstate != VCHIQ_SRVSTATE_FREE) &&
                (service->handle == handle) &&
                (service->instance == instance)) {
-               BUG_ON(service->ref_count == 0);
+               WARN_ON(service->ref_count == 0);
                service->ref_count++;
        } else
                service = NULL;
                 (service->srvstate == VCHIQ_SRVSTATE_CLOSED)) &&
                (service->handle == handle) &&
                (service->instance == instance)) {
-               BUG_ON(service->ref_count == 0);
+               WARN_ON(service->ref_count == 0);
                service->ref_count++;
        } else
                service = NULL;
                if (srv && (srv->srvstate != VCHIQ_SRVSTATE_FREE) &&
                        (srv->instance == instance)) {
                        service = srv;
-                       BUG_ON(service->ref_count == 0);
+                       WARN_ON(service->ref_count == 0);
                        service->ref_count++;
                        break;
                }
        spin_lock(&service_spinlock);
        WARN_ON(!service);
        if (service) {
-               BUG_ON(service->ref_count == 0);
+               WARN_ON(service->ref_count == 0);
                service->ref_count++;
        }
        spin_unlock(&service_spinlock);
                WARN(1, "%s: service is NULL\n", __func__);
                goto unlock;
        }
-       BUG_ON(service->ref_count == 0);
+       if (!service->ref_count) {
+               WARN(1, "%s: ref_count is zero\n", __func__);
+               goto unlock;
+       }
        service->ref_count--;
        if (!service->ref_count) {
                VCHIQ_STATE_T *state = service->state;