FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Device-mapper Development

 
 
LinkBack Thread Tools
 
Old 05-12-2008, 05:45 PM
 
Default multipath-tools/multipathd main.c clone_platform.h

CVSROOT: /cvs/dm
Module name: multipath-tools
Branch: RHEL5_FC6
Changes by: bmarzins@sourceware.org 2008-05-12 17:45:28

Modified files:
multipathd : main.c
Removed files:
multipathd : clone_platform.h

Log message:
Better fix for 355961. Instead of using clone(), use fork() and unshare()

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipathd/main.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1= 1.69.2.5&r2=1.69.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipathd/clone_platform.h.diff?cvsroot=dm&only_with_tag=RHE L5_FC6&r1=1.4.2.1&r2=NONE

--- multipath-tools/multipathd/main.c 2008/01/15 01:34:36 1.69.2.5
+++ multipath-tools/multipathd/main.c 2008/05/12 17:45:28 1.69.2.6
@@ -60,7 +60,6 @@
#include "cli_handlers.h"
#include "lock.h"
#include "waiter.h"
-#include "clone_platform.h"
#include "copy.h"

#define FILE_NAME_SIZE 256
@@ -1537,8 +1536,6 @@
vecs->lock = NULL;
FREE(vecs);
vecs = NULL;
- free_config(conf);
- conf = NULL;

condlog(2, "--------shut down-------");

@@ -1548,6 +1545,14 @@
dm_lib_release();
dm_lib_exit();

+ /*
+ * Freeing config must be done after condlog() and dm_lib_exit(),
+ * because logging functions like dlog() and dm_write_log()
+ * reference the config.
+ */
+ free_config(conf);
+ conf = NULL;
+
#ifdef _DEBUG_
dbg_free_final(NULL);
#endif
@@ -1559,9 +1564,6 @@
daemonize(void)
{
int pid;
-#ifdef CLONE_NEWNS
- void *child_stack;
-#endif

if( (pid = fork()) < 0){
fprintf(stderr, "Failed first fork : %s
", strerror(errno));
@@ -1572,35 +1574,19 @@

setsid();

-#ifdef CLONE_NEWNS
-
- child_stack = (void *)malloc(CHILD_STACK_SIZE);
- if (!child_stack) {
- fprintf(stderr, "Failed to allocate child stack : %s
",
- strerror(errno));
- _exit(1);
- }
-# if defined(__hppa__) || defined(__powerpc64__)
- pid = clone(child, child_stack, CLONE_NEWNS, (void *)1);
-# elif defined(__ia64__)
- pid = clone2(child, child_stack, CHILD_STACK_SIZE, CLONE_NEWNS,
- (void *)1, NULL, NULL, NULL);
-# else
- pid = clone(child, child_stack + CHILD_STACK_SIZE, CLONE_NEWNS,
- (void *)1);
-# endif
- if (pid < 0) {
- fprintf(stderr, "Clone failed : %s
", strerror(errno));
- _exit(1);
- }
- _exit(0);
-#else
if ( (pid = fork()) < 0){
fprintf(stderr, "Failed second fork : %s
", strerror(errno));
_exit(1);
}
if (pid != 0)
_exit(0);
+#ifdef CLONE_NEWNS
+ if (unshare(CLONE_NEWNS) < 0) {
+ fprintf(stderr, "Failed to unshare namespace : %s
", strerror(errno));
+ return child((void *)0);
+ }
+ return child((void *)1);
+#else
return child((void *)0);
#endif
}

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 

Thread Tools




All times are GMT. The time now is 09:45 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org