]> mj.ucw.cz Git - libucw.git/commitdiff
Main: Poll table turned into a growing array
authorMartin Mares <mj@ucw.cz>
Fri, 30 Jul 2010 17:06:42 +0000 (19:06 +0200)
committerMartin Mares <mj@ucw.cz>
Wed, 18 Aug 2010 16:12:58 +0000 (18:12 +0200)
ucw/mainloop.c
ucw/mainloop.h

index 9228024bb50874c1cc6061f21448e6f5c8538825..6bdf1e014203e160bd37fda173dbd15ecd0bcc07 100644 (file)
@@ -82,9 +82,8 @@ main_delete(struct main_context *m)
   ASSERT(clist_empty(&m->hook_done_list));
   ASSERT(clist_empty(&m->process_list));
   ASSERT(clist_empty(&m->signal_list));
-  if (m->timer_table)
-    GARY_FREE(m->timer_table);
-  xfree(m->poll_table);
+  GARY_FREE(m->timer_table);
+  GARY_FREE(m->poll_table);
   xfree(m);
   // FIXME: Some mechanism for cleaning up after fork()
 }
@@ -506,20 +505,11 @@ main_debug_context(struct main_context *m UNUSED)
 static void
 main_rebuild_poll_table(struct main_context *m)
 {
-  struct main_file *fi;
-  if (m->poll_table_size < m->file_cnt)
-    {
-      if (m->poll_table)
-       xfree(m->poll_table);
-      else
-       m->poll_table_size = 1;
-      while (m->poll_table_size < m->file_cnt)
-       m->poll_table_size *= 2;
-      m->poll_table = xmalloc(sizeof(struct pollfd) * m->poll_table_size);
-    }
+  GARY_INIT_OR_RESIZE(m->poll_table, m->file_cnt);
+  DBG("MAIN: Rebuilding poll table: %d entries", m->file_cnt);
+
   struct pollfd *p = m->poll_table;
-  DBG("MAIN: Rebuilding poll table: %d of %d entries set", m->file_cnt, m->poll_table_size);
-  CLIST_WALK(fi, m->file_list)
+  CLIST_FOR_EACH(struct main_file *, fi, m->file_list)
     {
       p->fd = fi->fd;
       fi->pollfd = p++;
index 95565d1362dcdce07372c8594d9011245b13b782..b403c69d242f8f25e5390e17af3a3a50cfd8f131 100644 (file)
@@ -39,7 +39,6 @@ struct main_context {
   clist signal_list;
   uns file_cnt;
   uns poll_table_obsolete;
-  uns poll_table_size;
   struct pollfd *poll_table;
   struct main_timer **timer_table;     /* Growing array containing the heap of timers */
   sigset_t want_signals;