View Single Post
GHartmann
Junior Member
Join Date: Feb 2018
Old 02-24-2018 , 16:28   Re: [EXTENSION] Late Downloads
Reply With Quote #12

I've discovered some sort of memory(?) bug, but I'm not proficient enough with C++ to figure out the cause.

Apologies in advance if there's actually just something wrong on my end I'm not seeing.

The test code:
Code:
#pragma semicolon 1
#pragma newdecls required

#include <sourcemod>
#include <tf2_stocks>
#include <latedl>

public Plugin myinfo =
{
	name = "Late Downloads Test",
	author = "Hartmann",
	description = "Late downloads testing",
	version = "1.3.2",
	url = "http://www.sourcemod.net/"
};

public void OnPluginStart()
{
	RegAdminCmd("testdl", Command_TestDL, ADMFLAG_SLAY);
	RegAdminCmd("testdl2", Command_TestDL2, ADMFLAG_SLAY);
	RegAdminCmd("testdl2b", Command_TestDL2b, ADMFLAG_SLAY);
	RegAdminCmd("testdl3", Command_TestDL3, ADMFLAG_SLAY);
	RegAdminCmd("testdl4", Command_TestDL4, ADMFLAG_SLAY);
}

public void OnDownloadSuccess(int iClient, char[] filename) {
	PrintToServer("%N downloaded file %s", iClient, filename);
}

public Action Command_TestDL(int client, int args)
{
	if (args > 0)
	{
		char full[128];
		char arg[128];
		
		GetCmdArgString(full, sizeof(full));
		GetCmdArg(1, arg, sizeof(arg));
		
		AddLateDownload(arg, false);
	}

	return Plugin_Handled;
}

public Action Command_TestDL2(int client, int args)
{
	char files[8][128];
	
	files[0] = "test/random_128K_00.bin";
	files[1] = "test/random_128K_01.bin";
	files[2] = "test/random_128K_02.bin";
	files[3] = "test/random_128K_03.bin";
	files[4] = "test/random_128K_04.bin";
	files[5] = "test/random_128K_05.bin";
	files[6] = "test/random_128K_06.bin";
	files[7] = "test/random_128K_07.bin";
	
	AddLateDownloads(files, 8, false);
	
	return Plugin_Handled;
}

public Action Command_TestDL2b(int client, int args)
{
	char files[8][24];
	
	files[0] = "test/random_128K_00.bin";
	files[1] = "test/random_128K_01.bin";
	files[2] = "test/random_128K_02.bin";
	files[3] = "test/random_128K_03.bin";
	files[4] = "test/random_128K_04.bin";
	files[5] = "test/random_128K_05.bin";
	files[6] = "test/random_128K_06.bin";
	files[7] = "test/random_128K_07.bin";
	
	AddLateDownloads(files, 8, false);
	
	return Plugin_Handled;
}

public Action Command_TestDL3(int client, int args)
{
	AddLateDownload("test/random_128K_00.bin", false);
	AddLateDownload("test/random_128K_01.bin", false);
	AddLateDownload("test/random_128K_02.bin", false);
	AddLateDownload("test/random_128K_03.bin", false);
	AddLateDownload("test/random_128K_04.bin", false);
	AddLateDownload("test/random_128K_05.bin", false);
	AddLateDownload("test/random_128K_06.bin", false);
	AddLateDownload("test/random_128K_07.bin", false);

	return Plugin_Handled;
}

public Action Command_TestDL4(int client, int args)
{
	char[] file00 = "test/random_128K_00.bin";
	char[] file01 = "test/random_128K_01.bin";
	char[] file02 = "test/random_128K_02.bin";
	char[] file03 = "test/random_128K_03.bin";
	char[] file04 = "test/random_128K_04.bin";
	char[] file05 = "test/random_128K_05.bin";
	char[] file06 = "test/random_128K_06.bin";
	char[] file07 = "test/random_128K_07.bin";
	
	AddLateDownload(file00, false);
	AddLateDownload(file01, false);
	AddLateDownload(file02, false);
	AddLateDownload(file03, false);
	AddLateDownload(file04, false);
	AddLateDownload(file05, false);
	AddLateDownload(file06, false);
	AddLateDownload(file07, false);
	
	return Plugin_Handled;
}
Running testdl fails to call the forward with the correct data. The files are all uploaded to the client, but the success forward isn't called until the last file is uploaded, and with the incorrect file name.
Code:
testdl test/random_128K_00.bin
testdl test/random_128K_01.bin
testdl test/random_128K_02.bin
testdl test/random_128K_03.bin
testdl test/random_128K_04.bin
testdl test/random_128K_05.bin
testdl test/random_128K_06.bin
testdl test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Running testdl2 and testdl3 works as expected:
Code:
testdl2
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_01.bin
Console downloaded file test/random_128K_01.bin
Gestalt💙Hartmann downloaded file test/random_128K_02.bin
Console downloaded file test/random_128K_02.bin
Gestalt💙Hartmann downloaded file test/random_128K_03.bin
Console downloaded file test/random_128K_03.bin
Gestalt💙Hartmann downloaded file test/random_128K_04.bin
Console downloaded file test/random_128K_04.bin
Gestalt💙Hartmann downloaded file test/random_128K_05.bin
Console downloaded file test/random_128K_05.bin
Gestalt💙Hartmann downloaded file test/random_128K_06.bin
Console downloaded file test/random_128K_06.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
Code:
testdl3
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_01.bin
Console downloaded file test/random_128K_01.bin
Gestalt💙Hartmann downloaded file test/random_128K_02.bin
Console downloaded file test/random_128K_02.bin
Gestalt💙Hartmann downloaded file test/random_128K_03.bin
Console downloaded file test/random_128K_03.bin
Gestalt💙Hartmann downloaded file test/random_128K_04.bin
Console downloaded file test/random_128K_04.bin
Gestalt💙Hartmann downloaded file test/random_128K_05.bin
Console downloaded file test/random_128K_05.bin
Gestalt💙Hartmann downloaded file test/random_128K_06.bin
Console downloaded file test/random_128K_06.bin
Gestalt💙Hartmann downloaded file test/random_128K_07.bin
Console downloaded file test/random_128K_07.bin
testdl2b works-ish. It reports a failure for "test/ran", and drops off the last file due to it.
Code:
testdl2b
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
L 02/24/2018 - 16:22:44: [LATEDL] Failed to track progress of sending file 'test/ran' to client 1 ('192.168.1.20:27005', 192.168.1.20:27005)!
L 02/24/2018 - 16:22:44: [LATEDL] Client 1 failed to download file 'test/ran'!
Console downloaded file test/ran
Gestalt💙Hartmann downloaded file test/random_128K_01.bin
Console downloaded file test/random_128K_01.bin
Gestalt💙Hartmann downloaded file test/random_128K_02.bin
Console downloaded file test/random_128K_02.bin
Gestalt💙Hartmann downloaded file test/random_128K_03.bin
Console downloaded file test/random_128K_03.bin
Gestalt💙Hartmann downloaded file test/random_128K_04.bin
Console downloaded file test/random_128K_04.bin
Gestalt💙Hartmann downloaded file test/random_128K_05.bin
Console downloaded file test/random_128K_05.bin
Gestalt💙Hartmann downloaded file test/random_128K_06.bin
Console downloaded file test/random_128K_06.bin
Running testdl4 fails like this:
Code:
testdl4
Gestalt💙Hartmann downloaded file
Console downloaded file
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
L 02/24/2018 - 16:11:44: [LATEDL] Failed to track progress of sending file 'bin' to client 1 ('192.168.1.20:27005', 192.168.1.20:27005)!
L 02/24/2018 - 16:11:44: [LATEDL] Client 1 failed to download file 'bin'!
Console downloaded file bin
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
Gestalt💙Hartmann downloaded file test/random_128K_00.bin
Console downloaded file test/random_128K_00.bin
GHartmann is offline