diff --git a/SOURCES/openvswitch-3.1.0.patch b/SOURCES/openvswitch-3.1.0.patch
index 1213713..fd6e911 100644
--- a/SOURCES/openvswitch-3.1.0.patch
+++ b/SOURCES/openvswitch-3.1.0.patch
@@ -4879,6 +4879,100 @@ index bfb2adef1..0deca14b9 100644
      ofproto_set_vlan_limit(smap_get_int(&ovs_cfg->other_config, "vlan-limit",
                                         LEGACY_MAX_VLAN_HEADERS));
      ofproto_set_bundle_idle_timeout(smap_get_uint(&ovs_cfg->other_config,
+diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c
+index 407bfc60e..2b2afb44c 100644
+--- a/vswitchd/ovs-vswitchd.c
++++ b/vswitchd/ovs-vswitchd.c
+@@ -65,19 +65,19 @@ static unixctl_cb_func ovs_vswitchd_exit;
+ static char *parse_options(int argc, char *argv[], char **unixctl_path);
+ OVS_NO_RETURN static void usage(void);
+ 
+-struct ovs_vswitchd_exit_args {
+-    bool *exiting;
+-    bool *cleanup;
+-};
++static struct ovs_vswitchd_exit_args {
++    struct unixctl_conn **conns;
++    size_t n_conns;
++    bool exiting;
++    bool cleanup;
++} exit_args;
+ 
+ int
+ main(int argc, char *argv[])
+ {
+-    char *unixctl_path = NULL;
+     struct unixctl_server *unixctl;
++    char *unixctl_path = NULL;
+     char *remote;
+-    bool exiting, cleanup;
+-    struct ovs_vswitchd_exit_args exit_args = {&exiting, &cleanup};
+     int retval;
+ 
+     set_program_name(argv[0]);
+@@ -108,14 +108,12 @@ main(int argc, char *argv[])
+         exit(EXIT_FAILURE);
+     }
+     unixctl_command_register("exit", "[--cleanup]", 0, 1,
+-                             ovs_vswitchd_exit, &exit_args);
++                             ovs_vswitchd_exit, NULL);
+ 
+     bridge_init(remote);
+     free(remote);
+ 
+-    exiting = false;
+-    cleanup = false;
+-    while (!exiting) {
++    while (!exit_args.exiting) {
+         OVS_USDT_PROBE(main, run_start);
+         memory_run();
+         if (memory_should_report()) {
+@@ -134,16 +132,22 @@ main(int argc, char *argv[])
+         bridge_wait();
+         unixctl_server_wait(unixctl);
+         netdev_wait();
+-        if (exiting) {
++        if (exit_args.exiting) {
+             poll_immediate_wake();
+         }
+         OVS_USDT_PROBE(main, poll_block);
+         poll_block();
+         if (should_service_stop()) {
+-            exiting = true;
++            exit_args.exiting = true;
+         }
+     }
+-    bridge_exit(cleanup);
++    bridge_exit(exit_args.cleanup);
++
++    for (size_t i = 0; i < exit_args.n_conns; i++) {
++        unixctl_command_reply(exit_args.conns[i], NULL);
++    }
++    free(exit_args.conns);
++
+     unixctl_server_destroy(unixctl);
+     service_stop();
+     vlog_disable_async();
+@@ -295,10 +299,14 @@ usage(void)
+ 
+ static void
+ ovs_vswitchd_exit(struct unixctl_conn *conn, int argc,
+-                  const char *argv[], void *exit_args_)
++                  const char *argv[], void *args OVS_UNUSED)
+ {
+-    struct ovs_vswitchd_exit_args *exit_args = exit_args_;
+-    *exit_args->exiting = true;
+-    *exit_args->cleanup = argc == 2 && !strcmp(argv[1], "--cleanup");
+-    unixctl_command_reply(conn, NULL);
++    exit_args.n_conns++;
++    exit_args.conns = xrealloc(exit_args.conns,
++                               exit_args.n_conns * sizeof *exit_args.conns);
++    exit_args.conns[exit_args.n_conns - 1] = conn;
++    exit_args.exiting = true;
++    if (!exit_args.cleanup) {
++        exit_args.cleanup = argc == 2 && !strcmp(argv[1], "--cleanup");
++    }
+ }
 diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
 index 2b57fc0e3..1204805b1 100644
 --- a/vswitchd/vswitch.xml
diff --git a/SPECS/openvswitch3.1.spec b/SPECS/openvswitch3.1.spec
index 68bad14..a2c0ec8 100644
--- a/SPECS/openvswitch3.1.spec
+++ b/SPECS/openvswitch3.1.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 3.1.0
-Release: 35%{?dist}
+Release: 36%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -754,6 +754,12 @@ exit 0
 %endif
 
 %changelog
+* Tue Jul 18 2023 Open vSwitch CI <ovs-ci@redhat.com> - 3.1.0-36
+- Merging upstream branch-3.1 [RH git: 413ddaaeec]
+    Commit list:
+    17022ea063 vswitchd: Wait for a bridge exit before replying to exit unixctl.
+
+
 * Tue Jun 27 2023 Open vSwitch CI <ovs-ci@redhat.com> - 3.1.0-35
 - Merging upstream branch-3.1 [RH git: 27d7ee3cae]
     Commit list: