void ker_killall(sos_code_id_t code_id) { bool found = false; uint8_t i; do { found = false; for(i=0;i<SCHED_NUMBER_BINS;i++){ sos_module_t *handle; handle = mod_bin[i]; while( handle != NULL ) { sos_code_id_t cid; cid = sos_read_header_word(handle->header, offsetof(mod_header_t, code_id)); cid = entohs(cid); if( cid == code_id ) { ker_deregister_module(handle->pid); found = true; break; } handle = handle->next; } if( found == true ) { break; } } } while( found == true ); }
static int8_t handle_loader_ls_on_node( Message *msg ) { msg_ls_reply_t *reply; uint8_t i; reply = (msg_ls_reply_t *) ker_malloc( sizeof( msg_ls_reply_t ), KER_DFT_LOADER_PID ); if( reply == NULL ) return -ENOMEM; for( i = 0; i < NUM_LOADER_PARAMS_ENTRIES; i ++ ) { sos_cam_t key = ker_cam_key( KER_DFT_LOADER_PID, i ); loader_cam_t *cam; uint8_t buf[2]; cam = ker_cam_lookup( key ); if( cam != NULL && cam->fetcher.status == FETCHING_DONE && (ker_codemem_read( cam->fetcher.cm, KER_DFT_LOADER_PID, buf, 2, 0) == SOS_OK)) { DEBUG_PID( KER_DFT_LOADER_PID, "Data(%d) = %d %d\n", i, buf[0], buf[1]); reply->pam_dst_pid[ i ] = buf[0]; reply->pam_dst_subpid[ i ] = buf[1]; } else { DEBUG_PID( KER_DFT_LOADER_PID, "Data(%d) = NULL\n", i); /* if( cam != NULL && cam->fetcher.status == FETCHING_DONE) { DEBUG_PID( KER_DFT_LOADER_PID, "ker_codemem_read failed...\n"); } */ reply->pam_dst_pid[ i ] = NULL_PID; reply->pam_dst_subpid[ i ] = 0; } } for( i = 0; i < NUM_LOADER_MODULE_ENTRIES; i ++ ) { sos_cam_t key = ker_cam_key( KER_DFT_LOADER_PID, NUM_LOADER_PARAMS_ENTRIES + i ); loader_cam_t *cam; cam = ker_cam_lookup( key ); if( cam != NULL && cam->fetcher.status == FETCHING_DONE ) { mod_header_ptr p; sos_code_id_t cid; // Get the address of the module header p = ker_codemem_get_header_address( cam->fetcher.cm ); cid = sos_read_header_word( p, offsetof(mod_header_t, code_id)); // warning: already netowrk order... reply->code_id[ i ] = cid; } else { reply->code_id[ i ] = 0; } } post_auto( KER_DFT_LOADER_PID, KER_DFT_LOADER_PID, MSG_LOADER_LS_REPLY, sizeof( msg_ls_reply_t ), reply, SOS_MSG_RELEASE, msg->saddr); return SOS_OK; }