diff --git a/client/app.cpp b/client/app.cpp index e5f5e10bbf..71fa2fcffd 100644 --- a/client/app.cpp +++ b/client/app.cpp @@ -495,7 +495,7 @@ bool ACTIVE_TASK_SET::is_slot_dir_in_use(char* dir) { // Get a free slot, // and make a slot dir if needed // -void ACTIVE_TASK::get_free_slot(RESULT* rp) { +int ACTIVE_TASK::get_free_slot(RESULT* rp) { #ifndef SIM int j, retval; char path[MAXPATHLEN]; @@ -515,12 +515,22 @@ void ACTIVE_TASK::get_free_slot(RESULT* rp) { retval = make_slot_dir(j); if (!retval) break; } + + // paranoia - don't allow unbounded slots + // + if (j > 1000) { + msg_printf(rp->project, MSG_INTERNAL_ERROR, + "exceeded limit of 1000 slot directories" + ); + return ERR_NULL; + } } slot = j; if (log_flags.slot_debug) { msg_printf(rp->project, MSG_INFO, "[slot] assigning slot %d to %s", j, rp->name); } #endif + return 0; } bool ACTIVE_TASK_SET::slot_taken(int slot) { diff --git a/client/app.h b/client/app.h index 1c44dcad5e..7941357a75 100644 --- a/client/app.h +++ b/client/app.h @@ -187,7 +187,7 @@ struct ACTIVE_TASK { int current_disk_usage(double&); // disk used by output files and temp files of this task - void get_free_slot(RESULT*); + int get_free_slot(RESULT*); int start(bool test=false); // start a process // Termination stuff. diff --git a/client/cpu_sched.cpp b/client/cpu_sched.cpp index fc30331068..9da464e2d8 100644 --- a/client/cpu_sched.cpp +++ b/client/cpu_sched.cpp @@ -1566,6 +1566,12 @@ bool CLIENT_STATE::enforce_run_list(vector& run_list) { RESULT* rp = results[i]; if (rp->non_cpu_intensive() && rp->runnable()) { atp = get_task(rp); + if (!atp) { + msg_printf(rp->project, MSG_INTERNAL_ERROR, + "Can't create task for %s", rp->name + ); + continue; + } atp->next_scheduler_state = CPU_SCHED_SCHEDULED; // don't count RAM usage because it's used sporadically, @@ -1685,6 +1691,12 @@ bool CLIENT_STATE::enforce_run_list(vector& run_list) { if (!atp) { atp = get_task(rp); } + if (!atp) { + msg_printf(rp->project, MSG_INTERNAL_ERROR, + "Can't create task for %s", rp->name + ); + continue; + } if (rp->avp->avg_ncpus > 1) { scheduled_mt = true; @@ -1954,7 +1966,11 @@ ACTIVE_TASK* CLIENT_STATE::get_task(RESULT* rp) { ACTIVE_TASK *atp = lookup_active_task_by_result(rp); if (!atp) { atp = new ACTIVE_TASK; - atp->get_free_slot(rp); + int retval = atp->get_free_slot(rp); + if (retval) { + delete atp; + return NULL; + } atp->init(rp); active_tasks.active_tasks.push_back(atp); } diff --git a/client/cs_account.cpp b/client/cs_account.cpp index ccef659110..eadf23faed 100644 --- a/client/cs_account.cpp +++ b/client/cs_account.cpp @@ -252,6 +252,10 @@ int PROJECT::parse_account_file_venue() { if (btemp) handle_no_rsc_pref(this, GPU_TYPE_ATI); continue; } + else if (xp.parse_bool("no_intel_gpu", btemp)) { + if (btemp) handle_no_rsc_pref(this, GPU_TYPE_INTEL); + continue; + } else if (xp.parse_str("no_rsc", buf2, sizeof(buf2))) { handle_no_rsc_pref(this, buf2); diff --git a/client/gpu_amd.cpp b/client/gpu_amd.cpp index 82204f06bc..52dc2b8a10 100644 --- a/client/gpu_amd.cpp +++ b/client/gpu_amd.cpp @@ -276,39 +276,33 @@ void COPROC_ATI::get( break; case 10: gpu_name="ATI Radeon HD 5500/5600 series (Redwood)"; - // AMD Radeon HD 6390/7510 (OEM rebranded) - break; + break; case 11: gpu_name="ATI Radeon HD 5400 series (Cedar)"; - // real names would be AMD Radeon HD 6290/6350/7350/8350 (OEM rebranded) - break; -// AMD CAL Chaos - see http://developer.amd.com/download/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf @page 230 - case 12: - gpu_name="AMD Radeon HD 6370D/6380G/6410D/6480G (Sumo)"; // OpenCL-Name = WinterPark - break; + break; + case 12: + gpu_name="AMD Radeon HD 6370D/6380G/6410D/6480G (Sumo)"; + break; case 13: - gpu_name="AMD Radeon HD 6520G/6530D/6550D/6620G (SuperSumo)"; // OpenCL-Name = BeaverCreek - break; + gpu_name="AMD Radeon HD 6520G/6530D/6550D/6620G (SuperSumo)"; + break; case 14: - gpu_name="AMD Radeon HD 6200/6300/7300 series (Wrestler)"; // OpenCL-Name = Loveland - // real names would be AMD Radeon HD 6250/6290/6310/6320/7310/7340 series (Wrestler) + gpu_name="AMD Radeon HD 6200/6300/7200/7300 series (Wrestler)"; break; case 15: gpu_name="AMD Radeon HD 6900 series (Cayman)"; break; case 16: gpu_name="AMD Radeon HD (Kauai)"; - break; + break; case 17: gpu_name="AMD Radeon HD 6790/6850/6870 series (Barts)"; - // AMD Radeon 7720 (OEM rebranded) break; case 18: gpu_name="AMD Radeon HD 6570/6670/7570/7670 series (Turks)"; break; case 19: gpu_name="AMD Radeon HD 6350/6450/7450/7470 series (Caicos)"; - // AMD Radeon HD 7450/7470/8450/8470/8490 (OEM rebranded) break; case 20: gpu_name="AMD Radeon HD 7870/7950/7970 series (Tahiti)"; @@ -321,36 +315,33 @@ void COPROC_ATI::get( break; case 23: gpu_name="AMD Radeon HD 7500/7600/8500/8600 series (Devastator)"; - // higher GPUs inside Trinity/Richland APUs - // PCI Device IDs 9900h to 991Fh break; - case 24: + case 24: gpu_name="AMD Radeon HD 7400/7500/8300/8400 series (Scrapper)"; - // (s)lower GPUs of Trinity/Richland APUs - // PCI Device IDs 9990h to 99AFh break; case 25: - gpu_name="AMD Radeon HD 8600/8790M (Oland)"; + gpu_name="AMD Radeon HD 8600/8790M/R7 250 (Oland)"; break; - case 26: - gpu_name="AMD Radeon HD 7790 series (Bonaire)"; + case 26: + gpu_name="AMD Radeon HD 7790/R7 260X (Bonaire)"; break; - case 27: - gpu_name="AMD Radeon HD (Casper)"; - break; - case 28: - gpu_name="AMD Radeon HD (Slimer)"; - break; - case 29: - gpu_name="AMD Radeon HD 8200/8300/8400 series (Kalindi)"; - // GPUs inside AMD Family 16h aka Kabini/Temash - break; - case 30: - gpu_name="AMD Radeon HD 8600M (Hainan)"; - break; - case 31: - gpu_name="AMD Radeon HD (Curacao)"; - break; + case 27: + gpu_name="AMD Radeon HD (Spectre)"; // Kaveri + break; + case 28: + gpu_name="AMD Radeon HD (Spooky)"; // Kaveri + break; + case 29: + gpu_name="AMD Radeon HD 8200/8300/8400 series (Kalindi)"; // Kabini + break; + case 30: + gpu_name="AMD Radeon HD 8600M (Hainan)"; + break; + case 31: + gpu_name="AMD Radeon R9 270X (Curacao)"; + break; + case 32: + gpu_name="AMD Radeon R9 290 (Hawaii)"; default: gpu_name="AMD Radeon HD (unknown)"; break; diff --git a/doc/index.php b/doc/index.php index 4d389c6b41..1db1213dce 100644 --- a/doc/index.php +++ b/doc/index.php @@ -200,6 +200,23 @@ function show_nsf() { "; } +require_once("../html/inc/language_names.inc"); + +function language_select() { + global $language_names; + $supported_languages = getSupportedLanguages(); + $bd = tra("Browser default"); + echo " +