Always exit and don't try to recover

The current code tries to recover from dropped connections and resets the
pcu state so it can keep running. However, this never worked correctly
which is why the -e option is used. This option exits the pcu as soon as
the internal state needs to be reset.

This patch removes this option and makes this behaviour default.

Ticket: SYS#390
Sponsored-by: On-Waves ehf
diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp
index 133eb97..6c5d72c 100644
--- a/src/gprs_bssgp_pcu.cpp
+++ b/src/gprs_bssgp_pcu.cpp
@@ -533,13 +533,8 @@
 	return &the_pcu;
 }
 
-void gprs_bssgp_destroy_or_exit(void)
+void gprs_bssgp_destroy(void)
 {
-	if (the_pcu.exit_on_destroy) {
-		LOGP(DBSSGP, LOGL_NOTICE, "Exiting on BSSGP destruction.\n");
-		exit(0);
-	}
-
 	if (!bssgp_nsi)
 		return;
 
@@ -564,12 +559,6 @@
 	bssgp_nsi = NULL;
 }
 
-void gprs_bssgp_exit_on_destroy(void)
-{
-	LOGP(DBSSGP, LOGL_NOTICE, "Going to quit on BSSGP destruction\n");
-	the_pcu.exit_on_destroy = 1;
-}
-
 struct bssgp_bvc_ctx *gprs_bssgp_pcu_current_bctx(void)
 {
 	return the_pcu.bctx;
diff --git a/src/gprs_bssgp_pcu.h b/src/gprs_bssgp_pcu.h
index aedcfc0..32b6728 100644
--- a/src/gprs_bssgp_pcu.h
+++ b/src/gprs_bssgp_pcu.h
@@ -57,7 +57,6 @@
 	int bvc_sig_reset;
 	int bvc_reset;
 	int bvc_unblocked;
-	int exit_on_destroy;
 
 	/** callbacks below */
 
@@ -75,8 +74,7 @@
 		uint16_t nsvci, uint16_t bvci, uint16_t mcc, uint16_t mnc,
 		uint16_t lac, uint16_t rac, uint16_t cell_id);
 
-void gprs_bssgp_exit_on_destroy(void);
-void gprs_bssgp_destroy_or_exit(void);
+void gprs_bssgp_destroy(void);
 
 struct bssgp_bvc_ctx *gprs_bssgp_pcu_current_bctx(void);
 
diff --git a/src/openbts_sock.cpp b/src/openbts_sock.cpp
index a09f834..2d9cae4 100644
--- a/src/openbts_sock.cpp
+++ b/src/openbts_sock.cpp
@@ -179,8 +179,10 @@
 
 void pcu_l1if_close(void)
 {
-	gprs_bssgp_destroy_or_exit();
+	gprs_bssgp_destroy();
 
 	/* FIXME: cleanup l1if */
 	talloc_free(l1fh->fl1h);
+
+	exit(0);
 }
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index ce13b96..0cb79eb 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -324,8 +324,8 @@
 			for (ts = 0; ts < 8; ts++)
 				bts->trx[trx].pdch[ts].free_resources();
 		}
-		gprs_bssgp_destroy_or_exit();
-		return 0;
+		gprs_bssgp_destroy();
+		exit(0);
 	}
 	LOGP(DL1IF, LOGL_INFO, "BTS available\n");
 	LOGP(DL1IF, LOGL_DEBUG, " mcc=%x\n", info_ind->mcc);
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index c0dac14..8631ad3 100644
--- a/src/pcu_main.cpp
+++ b/src/pcu_main.cpp
@@ -56,7 +56,6 @@
 			"provided by BTS\n"
 		"  -r   --realtime PRIO Use SCHED_RR with the specified "
 			"priority\n"
-		"  -e   --exit		Exit the application on disconnect\n"
 		);
 }
 
@@ -105,7 +104,7 @@
 			rt_prio = atoi(optarg);
 			break;
 		case 'e':
-			gprs_bssgp_exit_on_destroy();
+			fprintf(stderr, "Warning: Option '-e' is deprecated!\n");
 			break;
 		default:
 			fprintf(stderr, "Unknown option '%c'\n", c);
diff --git a/src/sysmo_sock.cpp b/src/sysmo_sock.cpp
index 2e2d9d3..951653e 100644
--- a/src/sysmo_sock.cpp
+++ b/src/sysmo_sock.cpp
@@ -112,12 +112,8 @@
 		gprs_rlcmac_tbf::free_all(&bts->trx[trx]);
 	}
 
-	gprs_bssgp_destroy_or_exit();
-
-	if (lost) {
-		state->timer.cb = pcu_sock_timeout;
-		osmo_timer_schedule(&state->timer, 5, 0);
-	}
+	gprs_bssgp_destroy();
+	exit(0);
 }
 
 static int pcu_sock_read(struct osmo_fd *bfd)