+ if (r == 0) /* too many pending? */
+ too_many++;
+ }
+ if (too_many)
+ {
+ gw_log (GW_LOG_DEBUG, module, "%d too many pending",
+ too_many);
+ for (ki = ke_info_list; ki; ki = ki->next)
+ {
+ if (!ki->queue && ki->pid != -1 && !ki->stopped)
+ {
+ if (!(ki->queue = str_queue_mk ()))
+ {
+ gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, module,
+ "str_queue_mk");
+ exit (1);
+ }
+ str_queue_enq (ki->queue, "stop\n");
+ str_queue_enq (ki->queue, "\001");
+ r = deliver (argc, argv, ki->id, ki->queue, &ki->gip,
+ &ki->pid, 1);
+ if (r != 1)
+ gw_log (GW_LOG_DEBUG, module,
+ "Stop not sent: %d", r);
+ str_queue_rm (&ki->queue);
+ ki->stopped = 1;
+ break;
+ }
+ }