void main() { // pages vec4 tex0 = texture2D(Texture0, TexCoord0 ); vec4 tex1 = texture2D(Texture1, TexCoord0 ); // geom vec4 tex2 = texture2D(Texture2, TexCoord0 ); vec4 tex3 = texture2D(Texture3, TexCoord0 ); float bh1 = unpack16(tex0.rg); float bh2 = unpack16(tex2.rg); vec4 res0 = vec4(0.0); vec4 res1 = vec4(0.0); if (bh2 > bh1) { res0 = tex2; res1 = tex3; } else { res0 = tex0; res1 = tex1; } gl_FragData[0] = res0; gl_FragData[1] = res1; }
/* Purge queued job start records from the agent queue * RET number of records purged */ static int _purge_job_start_req(void) { int purged = 0; ListIterator iter; uint16_t msg_type; uint32_t offset; Buf buffer; iter = list_iterator_create(agent_list); while ((buffer = list_next(iter))) { offset = get_buf_offset(buffer); if (offset < 2) continue; set_buf_offset(buffer, 0); (void) unpack16(&msg_type, buffer); /* checked by offset */ set_buf_offset(buffer, offset); if (msg_type == DBD_JOB_START) { list_remove(iter); purged++; } } list_iterator_destroy(iter); info("slurmdbd: purge %d job start records", purged); return purged; }
static void _save_dbd_state(void) { char *dbd_fname; Buf buffer; int fd, rc, wrote = 0; uint16_t msg_type; uint32_t offset; dbd_fname = slurm_get_state_save_location(); xstrcat(dbd_fname, "/dbd.messages"); (void) unlink(dbd_fname); /* clear save state */ fd = open(dbd_fname, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) { error("slurmdbd: Creating state save file %s", dbd_fname); } else if (agent_list && list_count(agent_list)) { char curr_ver_str[10]; snprintf(curr_ver_str, sizeof(curr_ver_str), "VER%d", SLURM_PROTOCOL_VERSION); buffer = init_buf(strlen(curr_ver_str)); packstr(curr_ver_str, buffer); rc = _save_dbd_rec(fd, buffer); free_buf(buffer); if (rc != SLURM_SUCCESS) goto end_it; while ((buffer = list_dequeue(agent_list))) { /* * We do not want to store registration messages. If an * admin puts in an incorrect cluster name we can get a * deadlock unless they add the bogus cluster name to * the accounting system. */ offset = get_buf_offset(buffer); if (offset < 2) { free_buf(buffer); continue; } set_buf_offset(buffer, 0); (void) unpack16(&msg_type, buffer); /* checked by offset */ set_buf_offset(buffer, offset); if (msg_type == DBD_REGISTER_CTLD) { free_buf(buffer); continue; } rc = _save_dbd_rec(fd, buffer); free_buf(buffer); if (rc != SLURM_SUCCESS) break; wrote++; } } end_it: if (fd >= 0) { verbose("slurmdbd: saved %d pending RPCs", wrote); (void) close(fd); } xfree(dbd_fname); }
/* Given a int ptr, it will unpack an array of size_val */ int unpack16_array(uint16_t ** valp, uint32_t * size_val, Buf buffer) { uint32_t i = 0; if (unpack32(size_val, buffer)) return SLURM_ERROR; *valp = xmalloc_nz((*size_val) * sizeof(uint16_t)); for (i = 0; i < *size_val; i++) { if (unpack16((*valp) + i, buffer)) return SLURM_ERROR; } return SLURM_SUCCESS; }
int main (int argc, char *argv[]) { Buf buffer; uint16_t test16 = 1234, out16; uint32_t test32 = 5678, out32, byte_cnt; char testbytes[] = "TEST BYTES", *outbytes; char teststring[] = "TEST STRING", *outstring = NULL; char *nullstr = NULL; char *data; int data_size; long double test_double = 1340664754944.2132312, test_double2; uint64_t test64; buffer = init_buf (0); pack16(test16, buffer); pack32(test32, buffer); pack64((uint64_t)test_double, buffer); packstr(testbytes, buffer); packstr(teststring, buffer); packstr(nullstr, buffer); packstr("literal", buffer); packstr("", buffer); data_size = get_buf_offset(buffer); printf("wrote %d bytes\n", data_size); /* Pull data off old buffer, destroy it, and create a new one */ data = xfer_buf_data(buffer); buffer = create_buf(data, data_size); unpack16(&out16, buffer); TEST(out16 != test16, "un/pack16"); unpack32(&out32, buffer); TEST(out32 != test32, "un/pack32"); unpack64(&test64, buffer); test_double2 = (long double)test64; TEST((uint64_t)test_double2 != (uint64_t)test_double, "un/pack double as a uint64"); /* info("Original\t %Lf", test_double); */ /* info("uint64\t %ld", test64); */ /* info("converted LD\t %Lf", test_double2); */ unpackstr_ptr(&outbytes, &byte_cnt, buffer); TEST( ( strcmp(testbytes, outbytes) != 0 ) , "un/packstr_ptr"); unpackstr_xmalloc(&outstring, &byte_cnt, buffer); TEST(strcmp(teststring, outstring) != 0, "un/packstr_xmalloc"); xfree(outstring); unpackstr_xmalloc(&nullstr, &byte_cnt, buffer); TEST(nullstr != NULL, "un/packstr of null string."); unpackstr_xmalloc(&outstring, &byte_cnt, buffer); TEST(strcmp("literal", outstring) != 0, "un/packstr of string literal"); xfree(outstring); unpackstr_xmalloc(&outstring, &byte_cnt, buffer); TEST(strcmp("", outstring) != 0, "un/packstr of string \"\" "); xfree(outstring); free_buf(buffer); totals(); return failed; }