private NvInternalResult Free(ref NvMapFree arguments) { NvMapHandle map = GetMapFromHandle(Owner, arguments.Handle); if (map == null) { Logger.Warning?.Print(LogClass.ServiceNv, $"Invalid handle 0x{arguments.Handle:x8}!"); return(NvInternalResult.InvalidInput); } if (DecrementMapRefCount(Owner, arguments.Handle)) { arguments.Address = map.Address; arguments.Flags = 0; } else { arguments.Address = 0; arguments.Flags = FlagNotFreedYet; } arguments.Size = map.Size; return(NvInternalResult.Success); }
private NvInternalResult Free(ref NvMapFree arguments) { NvMapHandle map = GetMapFromHandle(Owner, arguments.Handle); if (map == null) { Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{arguments.Handle:x8}!"); return(NvInternalResult.InvalidInput); } if (map.DecrementRefCount() <= 0) { DeleteMapWithHandle(arguments.Handle); Logger.PrintInfo(LogClass.ServiceNv, $"Deleted map {arguments.Handle}!"); arguments.Address = map.Address; arguments.Flags = 0; } else { arguments.Address = 0; arguments.Flags = FlagNotFreedYet; } arguments.Size = map.Size; return(NvInternalResult.Success); }
private static int Free(ServiceCtx context) { long inputPosition = context.Request.GetBufferType0x21().Position; long outputPosition = context.Request.GetBufferType0x22().Position; NvMapFree args = MemoryHelper.Read <NvMapFree>(context.Memory, inputPosition); NvMapHandle map = GetNvMap(context, args.Handle); if (map == null) { Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); return(NvResult.InvalidInput); } if (map.DecrementRefCount() <= 0) { DeleteNvMap(context, args.Handle); Logger.PrintInfo(LogClass.ServiceNv, $"Deleted map {args.Handle}!"); args.Address = map.Address; args.Flags = 0; } else { args.Address = 0; args.Flags = FlagNotFreedYet; } args.Size = map.Size; MemoryHelper.Write(context.Memory, outputPosition, args); return(NvResult.Success); }