From f2767d08f27e82e3d87c09b4da3be4ded0d23def Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Tue, 6 Apr 2004 22:58:40 +0000 Subject: [PATCH] initial checkin git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1432 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/lib_internal/switchtowatchxid.c | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 util-vserver/lib_internal/switchtowatchxid.c diff --git a/util-vserver/lib_internal/switchtowatchxid.c b/util-vserver/lib_internal/switchtowatchxid.c new file mode 100644 index 0000000..855e9df --- /dev/null +++ b/util-vserver/lib_internal/switchtowatchxid.c @@ -0,0 +1,64 @@ +// $Id$ --*- c -*-- + +// Copyright (C) 2004 Enrico Scholz +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + + // try to switch in context 1 +bool +switchToWatchXid(char const **errptr) +{ +#if 0 +# warning Compiling in debug-code + return; +#endif + if (vc_get_task_xid(0)==1) return true; + + if (vc_isSupported(vcFEATURE_MIGRATE)) { + if (vc_create_context(1)==VC_NOCTX) { + if (errno!=EEXIST) { + if (errptr) *errptr = "vc_create_context()"; + return false; + } + + if (vc_migrate_context(1)==-1) { + if (errptr) *errptr = "vc_migrate_context()"; + return false; + } + } + } + else { +#if VC_ENABLE_API_COMPAT + if (vc_new_s_context(1,0,0)==VC_NOCTX) { + if (errptr) *errptr = "vc_new_s_context()"; + return false; + } +#else + if (errptr) *errptr = "can not change context: migrate kernel feature missing and 'compat' API disabled"; + errno = ENOSYS; + return false; +#endif + } + + return true; +} + -- 1.8.1.5