extern gfc_unit *set_internal_unit (st_parameter_dt *, gfc_unit *, int);
internal_proto(set_internal_unit);
-extern void check_for_recursive (st_parameter_dt *dtp);
-internal_proto(check_for_recursive);
+extern void stash_internal_unit (st_parameter_dt *);
+internal_proto(stash_internal_unit);
extern gfc_unit *find_unit (int);
internal_proto(find_unit);
NOTE ("data_transfer_init");
- check_for_recursive (dtp);
-
ionml = ((cf & IOPARM_DT_IONML_SET) != 0) ? dtp->u.p.ionml : NULL;
memset (&dtp->u.p, 0, sizeof (dtp->u.p));
}
/* get_gfc_unit_from_root()-- Given an integer, return a pointer
- to the unit structure. Returns NULL if the unit does not exist. */
+ to the unit structure. Returns NULL if the unit does not exist,
+ otherwise returns a locked unit. */
static inline gfc_unit *
get_gfc_unit_from_unit_root (int n)
return p;
}
-/* Recursive I/O is not allowed. Check to see if the UNIT exists and if
- so, check if the UNIT is locked already. This check does not apply
- to DTIO. */
-void
-check_for_recursive (st_parameter_dt *dtp)
-{
- gfc_unit *p;
-
- p = get_gfc_unit_from_unit_root(dtp->common.unit);
- if (p != NULL)
- {
- if (!(dtp->common.flags & IOPARM_DT_HAS_INTERNAL_UNIT))
- /* The unit p is external. */
- {
- /* Check if this is a parent I/O. */
- if (p->child_dtio == 0)
- {
- if (TRYLOCK(&p->lock))
- {
- generate_error (&dtp->common, LIBERROR_RECURSIVE_IO, NULL);
- return;
- }
- UNLOCK(&p->lock);
- }
- }
- }
-}
-
/* get_gfc_unit()-- Given an integer, return a pointer to the unit
structure. Returns NULL if the unit does not exist,
otherwise returns a locked unit. */
p = "Bad ID in WAIT statement";
break;
- case LIBERROR_RECURSIVE_IO:
- p = "Recursive I/O not allowed";
- break;
-
default:
p = "Unknown error code";
break;