_GameMode::PreLogin crash if use UniqueId->GetHexEncodedString() linux dedicated server

Trying to understand the GameMode :: PreLogin variable “UniqueID” and “UKismetSystemLibrary :: GetUniqueDeviceId” are one and the same result, but if I try to use UniqueId-> GetHexEncodedString () in a dedicated server on linux, crash if hi try to do this line

FString _logMsg = UniqueId->GetHexEncodedString();
but if remove this line, work fine.

use the source of the Engine 4.11.0 Preview 4 from GitHub

construction of a dedicated server on Win7 for Linux (v4_clang-3.5.0_ld-2.24_glibc-2.12.2)

runs on Linux Ubuntu 14.04 LTS

Hey Anatoliy-

Can you provide the callstack and log files from the crash for additional information? Also, can you explain how you setup your project to use GetHexEncodedString() or provide a sample project with this issue so that I can try to test this issue on my end?

Cheers

Hi . Yes, if for you will be better i can send anything cpp fiels or all project for help. What about log files i think you means this. Sorry i do not have good skills in programming. Can`t send “minidump.dmp” and “wermeta.xml” permissions denied wen i try send.

About " Also, can you explain how you setup your project to use GetHexEncodedString()", i just want look what stored in GameMode :: PreLogin variable “UniqueID” and understand this variables.

If you add the .dmp and .xml to a zip file you should be able to upload the zip here. Sending a copy of the project would help me see exactly where the crash is occurring. What action are you taking when the crash occurs (Such as saving, compiling a blueprint, playing in editor, etc)?

This folder created when crash. dedicated server works fine on linux. But when client try connect to dedicated server and running ::PreLogin with this string “FString _logMsg = UniqueId->GetHexEncodedString();” server crashed. If i remove this all works fine. Client compiled for windows. Dedicated server for Linux.
link text

When dedicated server compiled (linux chipping server) and running on linux pc, and client compiled from VS2015 or build in UE4 or run in UE4. How i understand client start connecting to dedicated server and dedicated server run PreLogin and this function run string “FString _logMsg = UniqueId->GetHexEncodedString();” and dedicated server crash. I create tomorrow project like my and send in forum.

Hey , i create test project for trace bug (or not bug). Dedicated server crash in windows too like in linux. I hope this will helpful. To start bug, compile client and dedicated server run and in moment client connected to dedicated server, his (server) crashed.
link text

Can you explain how you setup your server/client dedicated server for the test project? I tried creating a new project and in the drop down menu next to play I set number of players to 2 and checked the box for dedicated server. In both PIE mode and standalone mode I did not get any crash server or client side. Can you walk me through your setup so I can try testing for this crash on my end?

Hi , i tested ue4testcrash.zip project in PIE and standalone mode yep, all works fine. But if i use

for windows

  1. file->pacetge project → windows → windows(64)
  2. open project in visual studio 2015 and build with solution configuration (Shipping server win64)
  3. Copy file from \Binaries\Win64\UE4TestCrashServer-Win64-Shipping.exe to WindowsNoEditor\UE4TestCrash\Binaries\Win64\
  4. run server and client (UE4TestCrash.exe UE4TestCrashServer-Win64-Shipping.exe)
    5.on this moment all works fine and i see UE4TestCrashServer-Win64-Shipping.exe in task maneger-> process
  5. click button in client to connect server
  6. and on this moment dedicat server closed without any massages i dont see him in maneger-> process

for linux
from 1 - 6 step all also but selected linux
7. after connect UE4TestCrashServer-Linux-Shipping closed and with him created crash folder.

If i not use “FString _logMsg = UniqueId->GetHexEncodedString();” this string in ::PreLogin gamemode all work fine.

serverGameMode.cpp

#include "UE4TestCrash.h"
#include "serverGameMode.h"

void AserverGameMode::PreLogin(const FString& Options, const FString& Address, const TSharedPtr<const FUniqueNetId>& UniqueId, FString& ErrorMessage)
{
#ifdef SERVER
	FString _logMsg = UniqueId->GetHexEncodedString();
#endif

}

serverGameMode.h

#pragma once

#include "GameFramework/GameMode.h"
#include "serverGameMode.generated.h"

/**
 * 
 */
UCLASS()
class UE4TESTCRASH_API AserverGameMode : public AGameMode
{
	GENERATED_BODY()
public:
	virtual void PreLogin(const FString& Options, const FString& Address, const TSharedPtr<const FUniqueNetId>& UniqueId, FString& ErrorMessage) override;

};

Hi . I found problem. it`s my no high knowledge. I understood if i use pointers, first i must check of his existence.

Before

FString _logMsg = UniqueId->GetHexEncodedString();

After

if (!UniqueId)

{

FString _logMsg = "UniqueId not exists";

}

else

{

FString _logMsg = UniqueId->GetHexEncodedString();

}

Thank you for helping and your time :slight_smile: