@@ -316,28 +316,18 @@ erts_internal_trace_pattern_4(BIF_ALIST_4)
316316{
317317 ErtsTraceSession * session ;
318318
319- if (!term_to_session (BIF_ARG_1 , & session , false)) {
320- goto session_error ;
321- }
322-
323319 if (!erts_try_seize_code_mod_permission (BIF_P )) {
324- erts_deref_trace_session (session );
325320 ERTS_BIF_YIELD4 (BIF_TRAP_EXPORT (BIF_erts_internal_trace_pattern_4 ),
326321 BIF_P , BIF_ARG_1 , BIF_ARG_2 , BIF_ARG_3 , BIF_ARG_4 );
327322 }
328323
329- /* Double check liveness with seized code mod permission */
330- if (!erts_is_trace_session_alive (session )) {
324+ if (!term_to_session (BIF_ARG_1 , & session , false)) {
331325 erts_release_code_mod_permission ();
332- erts_deref_trace_session ( session ) ;
333- goto session_error ;
326+ BIF_P -> fvalue = am_session ;
327+ BIF_ERROR ( BIF_P , BADARG | EXF_HAS_EXT_INFO ) ;
334328 }
335329
336330 return trace_pattern (BIF_P , session , BIF_ARG_2 , BIF_ARG_3 , BIF_ARG_4 );
337-
338- session_error :
339- BIF_P -> fvalue = am_session ;
340- BIF_ERROR (BIF_P , BADARG | EXF_HAS_EXT_INFO );
341331}
342332
343333static Eterm
@@ -911,30 +901,21 @@ Eterm erts_internal_trace_4(BIF_ALIST_4)
911901 ErtsTraceSession * session ;
912902 Eterm ret ;
913903
914- if (!term_to_session (BIF_ARG_1 , & session , false)) {
915- goto session_error ;
916- }
917904 if (!erts_try_seize_code_mod_permission (BIF_P )) {
918- erts_deref_trace_session (session );
919905 ERTS_BIF_YIELD4 (BIF_TRAP_EXPORT (BIF_erts_internal_trace_4 ),
920906 BIF_P , BIF_ARG_1 , BIF_ARG_2 , BIF_ARG_3 , BIF_ARG_4 );
921907 }
922908
923- /* Double check liveness with seized code mod permission */
924- if (!erts_is_trace_session_alive (session )) {
909+ if (!term_to_session (BIF_ARG_1 , & session , false)) {
925910 erts_release_code_mod_permission ();
926- erts_deref_trace_session ( session ) ;
927- goto session_error ;
911+ BIF_P -> fvalue = am_session ;
912+ BIF_ERROR ( BIF_P , BADARG | EXF_HAS_EXT_INFO ) ;
928913 }
929914
930915 ret = trace (BIF_P , session , BIF_ARG_2 , BIF_ARG_3 , BIF_ARG_4 );
931916
932917 erts_deref_trace_session (session );
933918 return ret ;
934-
935- session_error :
936- BIF_P -> fvalue = am_session ;
937- BIF_ERROR (BIF_P , BADARG | EXF_HAS_EXT_INFO );
938919}
939920
940921static
@@ -1298,19 +1279,24 @@ Eterm
12981279erts_internal_trace_session_destroy_1 (BIF_ALIST_1 )
12991280{
13001281 ErtsTraceSession * session ;
1282+
1283+ if (!erts_try_seize_code_mod_permission (BIF_P )) {
1284+ ERTS_BIF_YIELD1 (BIF_TRAP_EXPORT (BIF_erts_internal_trace_session_destroy_1 ),
1285+ BIF_P , BIF_ARG_1 );
1286+ }
1287+
13011288 if (!term_to_session (BIF_ARG_1 , & session , true)) {
1289+ erts_release_code_mod_permission ();
13021290 BIF_P -> fvalue = am_badopt ;
13031291 BIF_ERROR (BIF_P , BADARG | EXF_HAS_EXT_INFO );
13041292 }
13051293 if (!erts_is_trace_session_alive (session )) {
1294+ erts_release_code_mod_permission ();
13061295 erts_deref_trace_session (session );
13071296 BIF_RET (am_false );
13081297 }
1309- if (!erts_try_seize_code_mod_permission (BIF_P )) {
1310- erts_deref_trace_session (session );
1311- ERTS_BIF_YIELD1 (BIF_TRAP_EXPORT (BIF_erts_internal_trace_session_destroy_1 ),
1312- BIF_P , BIF_ARG_1 );
1313- }
1298+
1299+
13141300 if (erts_atomic_cmpxchg_nob (& session -> state ,
13151301 ERTS_TRACE_SESSION_CLEARING ,
13161302 ERTS_TRACE_SESSION_ALIVE )
@@ -1423,27 +1409,19 @@ Eterm erts_internal_trace_info_3(BIF_ALIST_3)
14231409 bool to_be_continued = false;
14241410 Eterm ret ;
14251411
1426- if (BIF_ARG_1 == am_any ) {
1427- /* trace:session_info */
1428- session = NULL ;
1429- }
1430- else if (!term_to_session (BIF_ARG_1 , & session , true)) {
1431- goto session_error ;
1432- }
1433-
14341412 if (!erts_try_seize_code_mod_permission (BIF_P )) {
1435- if (session ) {
1436- erts_deref_trace_session (session );
1437- }
14381413 ERTS_BIF_YIELD3 (BIF_TRAP_EXPORT (BIF_erts_internal_trace_info_3 ),
14391414 BIF_P , BIF_ARG_1 , BIF_ARG_2 , BIF_ARG_3 );
14401415 }
14411416
1442- /* Double check session liveness with seized code mod permission */
1443- if (session && !erts_is_trace_session_alive (session )) {
1417+ if (BIF_ARG_1 == am_any ) {
1418+ /* trace:session_info */
1419+ session = NULL ;
1420+ }
1421+ else if (!term_to_session (BIF_ARG_1 , & session , false)) {
14441422 erts_release_code_mod_permission ();
1445- erts_deref_trace_session ( session ) ;
1446- goto session_error ;
1423+ BIF_P -> fvalue = am_session ;
1424+ BIF_ERROR ( BIF_P , BADARG | EXF_HAS_EXT_INFO ) ;
14471425 }
14481426
14491427 ret = trace_info (BIF_P , session , BIF_ARG_2 , BIF_ARG_3 , & to_be_continued );
@@ -1454,10 +1432,6 @@ Eterm erts_internal_trace_info_3(BIF_ALIST_3)
14541432 }
14551433 }
14561434 return ret ;
1457-
1458- session_error :
1459- BIF_P -> fvalue = am_session ;
1460- BIF_ERROR (BIF_P , BADARG | EXF_HAS_EXT_INFO );
14611435}
14621436
14631437static
0 commit comments