aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf.cpp
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-07-03 12:38:59 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-07-03 15:30:26 +0200
commit9380f5d2181c63922627cbff6abe5e3cd05523e4 (patch)
tree928d2080266962eb2fc307538b9835982f437236 /src/tbf.cpp
parentac89a555fa73b24a77bb861811774a5af885bc84 (diff)
tbf: Add GprsMs* argument to update() and use it in reuse_tbf
Since set_ms() is caled on the new DL TBF, the old DL TBF loses the reference to the MS object. This will lead to a segfault, when update() is called in reuse_tbf(). This commit adds an optional GprsMs* parameter to update() and uses it for the slot allocation. This fixes a TbfTest crash that would otherwise occur after applying the next commit. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/tbf.cpp')
-rw-r--r--src/tbf.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp
index ddc3b91f..e83873ab 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -263,18 +263,24 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf)
talloc_free(tbf);
}
-int gprs_rlcmac_tbf::update()
+int gprs_rlcmac_tbf::update(GprsMs *ms_)
{
struct gprs_rlcmac_bts *bts_data = bts->bts_data();
- int rc;
+ int rc = -EINVAL;
LOGP(DRLCMAC, LOGL_DEBUG, "********** TBF update **********\n");
if (direction != GPRS_RLCMAC_DL_TBF)
return -EINVAL;
+ if (!ms_)
+ ms_ = ms();
+
+ if (!ms_)
+ return -EINVAL;
+
tbf_unlink_pdch(this);
- rc = bts_data->alloc_algorithm(bts_data, ms(), this, bts_data->alloc_algorithm_curst, 0);
+ rc = bts_data->alloc_algorithm(bts_data, ms_, this, bts_data->alloc_algorithm_curst, 0);
/* if no resource */
if (rc < 0) {
LOGP(DRLCMAC, LOGL_ERROR, "No resource after update???\n");