pdch: Fix heap-use-after-free in pdch->ulc

In existing previous code, pdch->ulc would be freed in
gprs_rlcmac_pdch::free_resources() when  it became disabled as per PCUIF
info_ind (for instance, when a DYN TS is switched PDCH->SDCCH8).
However, pdch->ulc was so far only allocated during pdch_init, which is
only called during bts_alloc() time.
Hence, after first info_ind disabling it, if it became again enabled
(again by info_ind re-enabling it after SDCCH8 was not longer in use),
the pdch->ulc would be used again but it would point to freed memory.

Let's rearrange how/when resources are freed to make it more logical.
With this patch, pdch internal resources are freed upon ->disable(), and
re-allocated upon ->enable().

Change-Id: Id51f5f6a54ac9f24b784c17bc360ac38f5726fc7
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 2373f60..5aa8849 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -650,7 +650,7 @@
 		for (trx_nr = 0; trx_nr < ARRAY_SIZE(bts->trx); trx_nr++) {
 			bts->trx[trx_nr].arfcn = info_ind->trx[trx_nr].arfcn;
 			for (ts_nr = 0; ts_nr < ARRAY_SIZE(bts->trx[0].pdch); ts_nr++)
-				bts->trx[trx_nr].pdch[ts_nr].free_resources();
+				bts->trx[trx_nr].pdch[ts_nr].disable();
 		}
 		gprs_bssgp_destroy(bts);
 		exit(0);
@@ -818,7 +818,6 @@
 			} else {
 				if (pdch->is_enabled()) {
 					pcu_tx_act_req(bts, pdch, 0);
-					pdch->free_resources();
 					pdch->disable();
 				}
 			}