diff options
author | Andreas.Eversberg <jolly@eversberg.eu> | 2010-11-14 11:50:14 +0000 |
---|---|---|
committer | Andreas.Eversberg <jolly@eversberg.eu> | 2010-11-14 11:50:14 +0000 |
commit | 2d8b427ef862b04dbf87ded883a4ee656ec38c34 (patch) | |
tree | 0b87d63854323ebe6de0e2a0bd558b7b88088f10 /src/host/layer23/src | |
parent | 11316da173cc0caff14445a159c968ff87204001 (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.c | 13 | ||||
-rw-r--r-- | src/host/layer23/src/common/sap_interface.c | 10 |
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; |