Sledeci podprogram zbira rezultate in dodeljuje nove naloge
delavcem.
static int
* claim_tile ()
* {
* int info, bufid, tid, y1, y2, size, job, s;
/*
Cakaj na rezultat kateregakoli delavca */
* bufid = pvm_recv (-1, MSGDATA);
* pvm_bufinfo(bufid, (int *)0, (int *)0, &tid );
Iz sporocila je potrebno izlociti informacijo o posiljatelju.
for(s = nserv; s-- > 0; )
* if(tid == servtids[s])
* break;
if ( s < 0 )
* {
* fprintf (stderr, "bogus tile data message from t
%
x ?\n", tid);
* fputs("Valid tids:", stderr);
* for(s = 0; s < nserv; s++)
* printf("<t
%
x>", servtids[s]);
* fputs("\n", stderr);
* return -1;
* }
Odpakira rezultate in jih shrani na ustrezno mesto.
pvm_upkint(&job, 1, 1);
* pvm_upkint(&y1, 1, 1);
* pvm_upkint(&y2, 1, 1);
* size = (y2 - y1) * width * 3; /*
stevilo RGB trojic */
* image[job] = (char *) malloc( size );
* info = pvm_upkbyte(image[job], size, 1);
servtiles[s]++; /*
statistika porabe racunalnikov */
* jobstogo--;
if (verbose)
* {
* printf("<
%
d>", job);
* }
Oznaci streznik kot prosti
servflist[s] = servfree;
* servfree = s;
/*
Dodeli novo delo, ce ga je se kaj */
* if ( jobnext )
* send_nextjob();
return 0;
* }