int bb_suspend(void) { mutex_lock(status_mutex); if (bb_status != BB_RUNNING && bb_status != BB_ISOLATED) { mutex_unlock(status_mutex); return -1; } if (bb_status != BB_ISOLATED) { smsc2_suspend(); gwlist_add_producer(isolated); } bb_status = BB_SUSPENDED; gwlist_add_producer(suspended); mutex_unlock(status_mutex); return 0; }
int bb_isolate(void) { mutex_lock(status_mutex); if (bb_status != BB_RUNNING && bb_status != BB_SUSPENDED) { mutex_unlock(status_mutex); return -1; } if (bb_status == BB_RUNNING) { smsc2_suspend(); list_add_producer(isolated); } else list_remove_producer(suspended); bb_status = BB_ISOLATED; mutex_unlock(status_mutex); return 0; }