bool task_acquire_tile(Device *device, RenderTile& tile) { thread_scoped_lock acquire_lock(acquire_mutex); bool result = false; RPCSend snd(socket, &error_func, "acquire_tile"); snd.write(); do { if(blocked_waiting) listen_step(); /* todo: avoid busy wait loop */ thread_scoped_lock lock(rpc_lock); if(!acquire_queue.empty()) { AcquireEntry entry = acquire_queue.front(); acquire_queue.pop_front(); if(entry.name == "acquire_tile") { tile = entry.tile; if(tile.buffer) tile.buffer = ptr_map[tile.buffer]; if(tile.rng_state) tile.rng_state = ptr_map[tile.rng_state]; result = true; break; } else if(entry.name == "acquire_tile_none") { break; } else { cout << "Error: unexpected acquire RPC receive call \"" + entry.name + "\"\n"; } } } while(acquire_queue.empty() && !stop && !have_error()); return result; }
const char * BWKV::value ( const char * key ) { get_query_value("SELECT value FROM kv WHERE key = ?", std::vector<BWString>({BWString(key)})); if(have_error()) return nullptr; else return _get_value(); }