diff --git a/src/cli/run.rs b/src/cli/run.rs
index 333af4c23621ea4f41131f23290b7ed55cf32eef..258c8d6c656a3aca288316e93cf30c2f79989bd4 100644
--- a/src/cli/run.rs
+++ b/src/cli/run.rs
@@ -119,6 +119,11 @@ pub fn main(args: args::Run) -> ! {
                         })
                         .start_non_joinable()?;
 
+                    std::panic::set_hook(Box::new(|info| {
+                        println!("Panic occurred, exiting: {}", info);
+                        std::process::exit(1);
+                    }));
+
                     // Note that we don't really need to pass the `config` here,
                     // because it's stored in the global variable which we can
                     // access from anywhere. But we still pass it explicitly just
diff --git a/src/lib.rs b/src/lib.rs
index 041fceac91eb6792421eebfee74148b6d8667441..4d20b3f285139eb2e3a9a5044fdcb0fded8cfceb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -342,7 +342,7 @@ fn redirect_interactive_sql() {
     .expect("overriding sql executor shouldn't fail")
 }
 
-/// Sets a check that will performed when a user is logging in
+/// Sets a check that will be performed when a user is logging in
 /// Checks for user exceeding maximum number of login attempts and if user was blocked.
 ///
 /// Also see [`storage::PropertyName::MaxLoginAttempts`].
@@ -691,10 +691,9 @@ fn start_discover(
         return Ok(());
     }
 
-    // Start listenning only after we've checked if this is a restart.
-    // Postjoin phase has it's own idea of when to start listenning.
-    tarantool::set_cfg_field("listen", config.instance.listen().to_host_port())
-        .expect("setting listen port shouldn't fail");
+    // Start listening only after we've checked if this is a restart.
+    // Postjoin phase has its own idea of when to start listening.
+    tarantool::set_cfg_field("listen", config.instance.listen().to_host_port())?;
 
     let role = discovery::wait_global();
     match role {