Index: devel.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/devel.module,v
retrieving revision 1.429
diff -u -r1.429 devel.module
--- devel.module	13 Aug 2010 17:48:31 -0000	1.429
+++ devel.module	14 Aug 2010 10:26:59 -0000
@@ -1092,23 +1092,22 @@
  * Switch from original user to another user and back.
  * We don't call session_save_session() because we really want to change users. Usually unsafe!
  *
- * @param $name The username to switch to.
+ * @param $name The username to switch to, or NULL to log out.
  */
 function devel_switch_user($name = NULL) {
   global $user;
-  static $orig_user = array();
 
+  if ($user->uid) {
+    module_invoke_all('user_logout', $user);
+  }
   if (isset($name)) {
     $user = user_load_by_name($name);
+    drupal_session_regenerate();
+    $edit = array();
+    user_module_invoke('login', $edit, $user);
   }
-  // Retrieve the initial user. Can be called multiple times.
-  elseif (count($orig_user)) {
-    $user = array_shift($orig_user);
-    array_unshift($orig_user, $user);
-  }
-  // Store the initial user.
   else {
-    $orig_user[] = $user;
+    session_destroy();
   }
   drupal_goto();
 }
