block instead of f.close