Problems with cyrus-imapd 2.1.11 under Solaris 8
Oleg Derevenetz
oleg at vsi.ru
Fri Dec 6 06:12:29 EST 2002
Nicola Ranaldo wrote:
> I think master would check exit value of its childs and decrement the number
> of ready_workers.
It seems like you perfectly right. I wrote a quick fix (i will be very
thankful if you check my fix and correct me if I am wrong) and it works
:-) Attachment contain this fix.
-------------- next part --------------
*** master.c.orig Fri Nov 1 19:44:33 2002
--- master.c Fri Dec 6 13:43:22 2002
***************
*** 720,728 ****
if (c && c->pid == pid) {
/* first thing in the linked list */
/* decrement active count for service */
if (c->s) c->s->nactive--;
!
ctable[pid % child_table_size] = c->next;
c->next = cfreelist;
cfreelist = c;
--- 720,733 ----
if (c && c->pid == pid) {
/* first thing in the linked list */
+ /* decrement workers count if process not exited correctly */
+ if (!(WIFEXITED(status)) && c->s) {
+ c->s->ready_workers--;
+ }
+
/* decrement active count for service */
if (c->s) c->s->nactive--;
!
ctable[pid % child_table_size] = c->next;
c->next = cfreelist;
cfreelist = c;
***************
*** 737,742 ****
--- 742,753 ----
struct centry *t;
t = c->next;
+
+ /* decrement workers count if process not exited correctly */
+ if (!(WIFEXITED(status)) && t->s) {
+ t->s->ready_workers--;
+ }
+
/* decrement active count for service */
if (t->s) t->s->nactive--;
More information about the Info-cyrus
mailing list