/* Changed by set_umid */
 static int umid_is_random = 1;
 static int umid_inited = 0;
+/* Have we created the files? Should we remove them? */
+static int umid_owned = 0;
 
 static int make_umid(int (*printer)(const char *fmt, ...));
 
 
 extern int tracing_pid;
 
-static int __init create_pid_file(void)
+static void __init create_pid_file(void)
 {
        char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
        char pid[sizeof("nnnnn\0")];
        int fd, n;
 
-       if(umid_file_name("pid", file, sizeof(file))) return 0;
+       if(umid_file_name("pid", file, sizeof(file)))
+               return;
 
        fd = os_open_file(file, of_create(of_excl(of_rdwr(OPENFLAGS()))), 
                          0644);
        if(fd < 0){
                printf("Open of machine pid file \"%s\" failed: %s\n",
                       file, strerror(-fd));
-               return 0;
+               return;
        }
 
        sprintf(pid, "%d\n", os_getpid());
        if(n != strlen(pid))
                printf("Write of pid file failed - err = %d\n", -n);
        os_close_file(fd);
-       return 0;
 }
 
 static int actually_do_remove(char *dir)
 void remove_umid_dir(void)
 {
        char dir[strlen(uml_dir) + UMID_LEN + 1];
-       if(!umid_inited) return;
+       if (!umid_owned)
+               return;
 
        sprintf(dir, "%s%s", uml_dir, umid);
        actually_do_remove(dir);
 
 char *get_umid(int only_if_set)
 {
-       if(only_if_set && umid_is_random) return(NULL);
-       return(umid);
+       if(only_if_set && umid_is_random)
+               return NULL;
+       return umid;
 }
 
-int not_dead_yet(char *dir)
+static int not_dead_yet(char *dir)
 {
        char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
        char pid[sizeof("nnnnn\0")], *end;
                   (p == CHOOSE_MODE(tracing_pid, os_getpid())))
                        dead = 1;
        }
-       if(!dead) return(1);
+       if(!dead)
+               return(1);
        return(actually_do_remove(dir));
 }
 
                if(errno == EEXIST){
                        if(not_dead_yet(tmp)){
                                (*printer)("umid '%s' is in use\n", umid);
+                               umid_owned = 0;
                                return(-1);
                        }
                        err = mkdir(tmp, 0777);
                return(-1);
        }
 
-       return(0);
+       umid_owned = 1;
+       return 0;
 }
 
 __uml_setup("uml_dir=", set_uml_dir,
        /* one function with the ordering we need ... */
        make_uml_dir();
        make_umid(printf);
-       return create_pid_file();
+       create_pid_file();
+       return 0;
 }
 __uml_postsetup(make_umid_setup);