summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-11-14 11:50:14 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-11-14 11:50:14 +0000
commit2d8b427ef862b04dbf87ded883a4ee656ec38c34 (patch)
tree0b87d63854323ebe6de0e2a0bd558b7b88088f10 /src/host/layer23/src
parent11316da173cc0caff14445a159c968ff87204001 (diff)
[layer23] Prevent layer23 apps from abort, if socket to layer1 fails
Diffstat (limited to 'src/host/layer23/src')
-rw-r--r--src/host/layer23/src/common/l1l2_interface.c13
-rw-r--r--src/host/layer23/src/common/sap_interface.c10
2 files changed, 17 insertions, 6 deletions
diff --git a/src/host/layer23/src/common/l1l2_interface.c b/src/host/layer23/src/common/l1l2_interface.c
index 9d31532b..e72b86ed 100644
--- a/src/host/layer23/src/common/l1l2_interface.c
+++ b/src/host/layer23/src/common/l1l2_interface.c
@@ -24,6 +24,7 @@
#include <osmocom/bb/common/osmocom_data.h>
#include <osmocom/bb/common/l1ctl.h>
#include <osmocom/bb/common/logging.h>
+#include <osmocom/bb/common/l1l2_interface.h>
#include <osmocore/utils.h>
@@ -41,8 +42,6 @@
#define GSM_L2_LENGTH 256
#define GSM_L2_HEADROOM 32
-extern int quit;
-
static int layer2_read(struct bsc_fd *fd)
{
struct msgb *msg;
@@ -58,9 +57,10 @@ static int layer2_read(struct bsc_fd *fd)
rc = read(fd->fd, &len, sizeof(len));
if (rc < sizeof(len)) {
fprintf(stderr, "Layer2 socket failed\n");
+ msgb_free(msg);
if (rc >= 0)
rc = -EIO;
- quit = rc;
+ layer2_close((struct osmocom_ms *) fd->data);
return rc;
}
@@ -90,6 +90,9 @@ static int layer2_write(struct bsc_fd *fd, struct msgb *msg)
{
int rc;
+ if (fd->fd <= 0)
+ return -EINVAL;
+
rc = write(fd->fd, msg->data, msg->len);
if (rc != msg->len) {
LOGP(DL1C, LOGL_ERROR, "Failed to write data: rc: %d\n", rc);
@@ -140,7 +143,11 @@ int layer2_open(struct osmocom_ms *ms, const char *socket_path)
int layer2_close(struct osmocom_ms *ms)
{
+ if (ms->l2_wq.bfd.fd <= 0)
+ return -EINVAL;
+
close(ms->l2_wq.bfd.fd);
+ ms->l2_wq.bfd.fd = -1;
bsc_unregister_fd(&ms->l2_wq.bfd);
return 0;
diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c
index 43c41a8d..d384c9eb 100644
--- a/src/host/layer23/src/common/sap_interface.c
+++ b/src/host/layer23/src/common/sap_interface.c
@@ -24,6 +24,7 @@
#include <osmocom/bb/common/osmocom_data.h>
#include <osmocom/bb/common/logging.h>
+#include <osmocom/bb/common/sap_interface.h>
#include <osmocore/utils.h>
@@ -41,8 +42,6 @@
#define GSM_SAP_LENGTH 300
#define GSM_SAP_HEADROOM 32
-extern int quit;
-
static int sap_read(struct bsc_fd *fd)
{
struct msgb *msg;
@@ -59,9 +58,10 @@ static int sap_read(struct bsc_fd *fd)
rc = read(fd->fd, &len, sizeof(len));
if (rc < sizeof(len)) {
fprintf(stderr, "SAP socket failed\n");
+ msgb_free(msg);
if (rc >= 0)
rc = -EIO;
- quit = rc;
+ sap_close(ms);
return rc;
}
@@ -92,6 +92,9 @@ static int sap_write(struct bsc_fd *fd, struct msgb *msg)
{
int rc;
+ if (fd->fd <= 0)
+ return -EINVAL;
+
rc = write(fd->fd, msg->data, msg->len);
if (rc != msg->len) {
LOGP(DSAP, LOGL_ERROR, "Failed to write data: rc: %d\n", rc);
@@ -145,6 +148,7 @@ int sap_close(struct osmocom_ms *ms)
return -EINVAL;
close(ms->sap_wq.bfd.fd);
+ ms->sap_wq.bfd.fd = -1;
bsc_unregister_fd(&ms->sap_wq.bfd);
return 0;