udhcpc: do not test for srand init, just do it at the start
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 22 Mar 2010 12:44:09 +0000 (13:44 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 22 Mar 2010 12:44:09 +0000 (13:44 +0100)
function                                             old     new   delta
udhcpc_main                                         2855    2867     +12
static.initialized                                     1       -      -1
client_background                                     32      31      -1
perform_release                                      124     122      -2
random_xid                                            38       -     -38
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 1/2 up/down: 12/-42)            Total: -30 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/udhcp/dhcpc.c

index d51d8b82f669c5d749c982d631530ff6d0d8e80e..e79feb7fe00451eebc3a3b33a134f95c6ade227a 100644 (file)
@@ -64,14 +64,8 @@ static smallint state;
 
 
 /* Create a random xid */
-static uint32_t random_xid(void)
+static ALWAYS_INLINE uint32_t random_xid(void)
 {
-       static smallint initialized;
-
-       if (!initialized) {
-               srand(monotonic_us());
-               initialized = 1;
-       }
        return rand();
 }
 
@@ -643,15 +637,14 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
        bb_sanitize_stdio();
        /* Equivalent of doing a fflush after every \n */
        setlinebuf(stdout);
-
        /* Create pidfile */
        write_pidfile(client_config.pidfile);
-
        /* Goes to stdout (unless NOMMU) and possibly syslog */
        bb_info_msg("%s (v"BB_VER") started", applet_name);
-
        /* Set up the signal pipe */
        udhcp_sp_setup();
+       /* We want random_xid to be random... */
+       srand(monotonic_us());
 
        state = INIT_SELECTING;
        udhcp_run_script(NULL, "deconfig");
@@ -681,7 +674,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
 
                tv.tv_sec = timeout - already_waited_sec;
                tv.tv_usec = 0;
-               retval = 0; /* If we already timed out, fall through, else... */
+               retval = 0;
+               /* If we already timed out, fall through with retval = 0, else... */
                if ((int)tv.tv_sec > 0) {
                        timestamp_before_wait = (unsigned)monotonic_sec();
                        log1("Waiting on select...");