rem: hash_open(team_hash, &i); while ((team = hash_next(team_hash, &i)) != NULL) {
add: hash_open(team_hash, &iterator); while ((team = hash_next(team_hash, &iterator)) != NULL) {
context: dump_team_info(int argc, char **argv){	struct team *team;	team_id id = -1;	struct hash_iterator i;	bool found = false;	if (argc > 2) {		kprintf("usage: team [id/address/name]\n");		return 0;	}	if (argc < 2) {		// just list the existing teams		hash_open(team_hash, &i);		while ((team = hash_next(team_hash, &i)) != NULL) {			dprintf("%p %5lx %s\n", team, team->id, team->name);		}		hash_close(team_hash, &i, false);		return 0;	}	id = strtoul(argv[1], NULL, 0);	if (IS_KERNEL_ADDRESS(id)) {		// semi-hack		_dump_team_info((struct team *)id);		return 0;	}	// walk through the thread list, trying to match name or id	hash_open(team_hash, &i);	while ((team = hash_next(team_hash, &i)) != NULL) {		if ((team->name && strcmp(argv[1], team->name) == 0) || team->id == id) {			_dump_team_info(team);			found = true;			break;		}	}	hash_close(team_hash, &i, false);	if (!found)		kprintf("team \"%s\" (%ld) doesn't exist!\n", argv[1], id);	return 0;}