void ext2_disk_read_block(uint32_t block_no, uint8_t *buf) { if (!block_no) return; spin_lock(&lock); int oldest = -1; uint32_t oldest_age = UINT32_MAX; for (uint32_t i = 0; i < CACHEENTRIES; ++i) { if (DC[i].block_no == block_no) { DC[i].last_use = ext2_time(); memcpy(buf, &DC[i].block, BLOCKSIZE); spin_unlock(&lock); return; } if (DC[i].last_use < oldest_age) { oldest = i; oldest_age = DC[i].last_use; } } for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) { ide_read_sector(DISK_PORT, 0, btos(block_no) + i, (uint8_t *)((uint32_t)&(DC[oldest].block) + SECTORSIZE * i)); } if (DC[oldest].dirty) { ext2_flush_dirty(oldest); } memcpy(buf, &DC[oldest].block, BLOCKSIZE); DC[oldest].block_no = block_no; DC[oldest].last_use = ext2_time(); DC[oldest].dirty = 0; spin_unlock(&lock); }
void ext2_flush_dirty(uint32_t ent_no) { // write out to the disk for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) { ide_write_sector_retry(DISK_PORT, 0, btos(DC[ent_no].block_no) + i, (uint8_t *)((uint32_t)DC[ent_no].block + SECTORSIZE * i)); } DC[ent_no].dirty = 0; }
void Conf_SaveConfig() { configfile = fopen("config.txt", "w"); fprintf(configfile,"useTraceFunc :: %s\r\n", btos(useTraceFunc)); fprintf(configfile,"useBrushFunc :: %s\r\n", btos(useBrushFunc)); fprintf(configfile,"tickRate :: %d\r\n", tickRate); fprintf(configfile,"quakeDir :: %s\r\n", quakeDir); fprintf(configfile,"ttAverageFreq :: %d\r\n", ttAverageFreq); fprintf(configfile,"ttFileName :: %s\r\n", ttFileName); fclose(configfile); // clamp values here. clampint(&tickRate, MIN_TICKRATE, MAX_TICKRATE); }
void ext2_flush_dirty(uint32_t ent_no) { // write out to the disk for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) { ide_write_sector(DISK_PORT, 0, btos(DC[ent_no].block_no) + i, (uint8_t *)((uint32_t)&DC[ent_no].block + SECTORSIZE * i)); //XXX: a hack? how about making ide_write_sector() blocking? // XXX: ^ ide_write_sector() IS blocking, we don't get notified properly of finishes to write calls timer_wait(10); } DC[ent_no].dirty = 0; }
void Entity::save(ofstream & myFile) { if (parent) { myFile << "Entity.addParent(" << getGUID() << " , " << parent->getGUID() << ") \n"; } myFile << "Entity.setActive(" << getGUID() << " , " << btos(active) << ") \n"; for (auto&x : tags) { myFile << "Entity.setTag(" << getGUID() << " , '" << x << "') \n"; } for (auto &x : containerC) { x->save(myFile, guid); } }
int main(void) { const int iter = get_iter(0, 1); const bool oth_first = CHECK_FLAG(iter, 1); diag("oth_first=%s", btos(oth_first)); plan_tests(1); sem_t *sems[] = { &goahead_sem, &done_sem }; for(int i=0; i < NUM_ELEMENTS(sems); i++) { int n = sem_init(sems[i], 0, 0); if(n != 0) { perror("sem_init"); abort(); } } int *data = malloc(sizeof(*data) * 2); data[0] = 100; data[1] = 100; pthread_t other; int n = pthread_create(&other, NULL, &other_fn, data); if(n != 0) { perror("pthread_create"); abort(); } int status; bool posted = false; do { status = xn_begin(); diag("main txn started"); int v0 = xn_read_int(&data[0]), v1 = xn_read_int(&data[1]); if(oth_first && !posted) { sem_post(&goahead_sem); sem_wait(&done_sem); posted = true; } v1 -= 200; if(v0 + v1 < 0) { diag("invariant broken in main"); break; } xn_put(&data[1], v1); } while(status = xn_commit(), XN_RESTART(status)); xn_abort(status); diag("main txn done"); if(!posted) { assert(!oth_first); sem_post(&goahead_sem); sem_wait(&done_sem); } void *retval = NULL; n = pthread_join(other, &retval); if(n != 0) { perror("pthread_join"); abort(); } if(!ok1(data[0] + data[1] >= 0)) { diag("data[0]=%d, data[1]=%d", data[0], data[1]); } free(data); for(int i=0; i < NUM_ELEMENTS(sems); i++) sem_destroy(sems[i]); return exit_status(); }
void MainWindow::on_actionSave_triggered() { QFile file(QFileDialog::getSaveFileName(this, tr("Save File"), "prop", tr("Prop File (*.fbxgui)"))); file.open(QIODevice::WriteOnly); QTextStream out(&file); out<<ui->input_folder->text()+"\n"; out<<ui->output_folder->text()+"\n"; out<<btos(ui->flipV->isChecked())+"\n"; out<<btos(ui->packC->isChecked())+"\n"; out<<btos(ui->showLog->isChecked())+"\n"; out<<QString::number(ui->maxM->value())+"\n"; out<<QString::number(ui->maxB->value())+"\n"; out<<QString::number(ui->maxW->value())+"\n"; out<<btos(ui->fbx->isChecked())+"\n"; out<<btos(ui->g3db->isChecked())+"\n"; out<<btos(ui->g3dj->isChecked())+"\n"; out<<ui->sinput_folder->text()+"\n"; out<<ui->soutput_folder->text()+"\n"; out<<btos(ui->sflipV->isChecked())+"\n"; out<<btos(ui->spackC->isChecked())+"\n"; out<<btos(ui->sshowLog->isChecked())+"\n"; out<<QString::number(ui->smaxM->value())+"\n"; out<<QString::number(ui->smaxB->value())+"\n"; out<<QString::number(ui->smaxW->value())+"\n"; out<<btos(ui->sfbx->isChecked())+"\n"; out<<btos(ui->sg3db->isChecked())+"\n"; out<<btos(ui->sg3dj->isChecked()); file.close(); }