Skip to content

Commit c719796

Browse files
authored
Fix GOSI server-side implementation (#1222)
What does this Pull Request accomplish? This pull request updates the NI-DMM GetOpenSessionsInformation API metadata and nidmm_restricted_service.custom.cpp to fix the Null Pointer Exception for NI-407x series devices. Why should this Pull Request be merged? This is a temporary workaround required for an internal release, and we will revert this change once the Exception is actually fixed in the Driver layer. What testing has been done? Relying on pipeline.
1 parent c167637 commit c719796

13 files changed

Lines changed: 92 additions & 61 deletions

File tree

generated/nidmm/nidmm.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
//---------------------------------------------------------------------
3-
// This file is generated from NI-DMM API metadata version 26.0.0d64
3+
// This file is generated from NI-DMM API metadata version 26.0.0d90
44
//---------------------------------------------------------------------
55
// Proto file for the NI-DMM Metadata
66
//---------------------------------------------------------------------

generated/nidmm_restricted/nidmm_restricted.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
//---------------------------------------------------------------------
3-
// This file is generated from NI-DMM-RESTRICTED API metadata version 26.0.0d64
3+
// This file is generated from NI-DMM-RESTRICTED API metadata version 26.0.0d90
44
//---------------------------------------------------------------------
55
// Proto file for the NI-DMM-RESTRICTED Metadata
66
//---------------------------------------------------------------------

generated/nidmm_restricted/nidmm_restricted_service.cpp

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ namespace nidmm_restricted_grpc {
2222
using nidevice_grpc::converters::convert_to_grpc;
2323
using nidevice_grpc::converters::MatchState;
2424

25-
const auto kErrorReadBufferTooSmall = -200229;
26-
const auto kWarningCAPIStringTruncatedToFitBuffer = 200026;
27-
2825
NiDmmRestrictedService::NiDmmRestrictedService(
2926
LibrarySharedPtr library,
3027
ResourceRepositorySharedPtr resource_repository,
@@ -126,49 +123,6 @@ namespace nidmm_restricted_grpc {
126123
}
127124
}
128125

129-
//---------------------------------------------------------------------
130-
//---------------------------------------------------------------------
131-
::grpc::Status NiDmmRestrictedService::GetOpenSessionsInformation(::grpc::ServerContext* context, const GetOpenSessionsInformationRequest* request, GetOpenSessionsInformationResponse* response)
132-
{
133-
if (context->IsCancelled()) {
134-
return ::grpc::Status::CANCELLED;
135-
}
136-
try {
137-
auto resource_name_mbcs = convert_from_grpc<std::string>(request->resource_name());
138-
ViRsrc resource_name = (ViRsrc)resource_name_mbcs.c_str();
139-
ViUInt64 buffer_size_needed_in_bytes {};
140-
while (true) {
141-
auto status = library_->GetOpenSessionsInformation(resource_name, nullptr, 0, &buffer_size_needed_in_bytes);
142-
if (!status_ok(status)) {
143-
return ConvertApiErrorStatusForViSession(context, status, 0);
144-
}
145-
std::string info_json;
146-
if (buffer_size_needed_in_bytes > 0) {
147-
info_json.resize(buffer_size_needed_in_bytes - 1);
148-
}
149-
auto buffer_size = buffer_size_needed_in_bytes;
150-
status = library_->GetOpenSessionsInformation(resource_name, (ViChar*)info_json.data(), buffer_size, &buffer_size_needed_in_bytes);
151-
if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer) {
152-
// buffer is now too small, try again
153-
continue;
154-
}
155-
if (!status_ok(status)) {
156-
return ConvertApiErrorStatusForViSession(context, status, 0);
157-
}
158-
response->set_status(status);
159-
std::string info_json_utf8;
160-
convert_to_grpc(info_json, &info_json_utf8);
161-
response->set_info_json(info_json_utf8);
162-
nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_info_json()));
163-
response->set_buffer_size_needed_in_bytes(buffer_size_needed_in_bytes);
164-
return ::grpc::Status::OK;
165-
}
166-
}
167-
catch (nidevice_grpc::NonDriverException& ex) {
168-
return ex.GetStatus();
169-
}
170-
}
171-
172126
//---------------------------------------------------------------------
173127
//---------------------------------------------------------------------
174128
::grpc::Status NiDmmRestrictedService::RequestPrivilege(::grpc::ServerContext* context, const RequestPrivilegeRequest* request, RequestPrivilegeResponse* response)

source/codegen/metadata/nidmm/attributes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
attributes = {
44
1050002: {
55
'codegen_method': 'public',

source/codegen/metadata/nidmm/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
config = {
44
'additional_headers': {
55
'custom/ivi_errors.h': [
66
'service.cpp'
77
]
88
},
9-
'api_version': '26.0.0d64',
9+
'api_version': '26.0.0d90',
1010
'c_function_prefix': 'niDMM_',
1111
'c_header': 'nidmm.h',
1212
'close_function': 'Close',

source/codegen/metadata/nidmm/enums.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
enums = {
44
'AcquisitionStatus': {
55
'codegen_method': 'public',

source/codegen/metadata/nidmm/functions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
functions = {
44
'Abort': {
55
'codegen_method': 'public',

source/codegen/metadata/nidmm/nidmm.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
//---------------------------------------------------------------------
3-
// This file is generated from NI-DMM API metadata version 26.0.0d64
3+
// This file is generated from NI-DMM API metadata version 26.0.0d90
44
//---------------------------------------------------------------------
55
// Proto file for the NI-DMM Metadata
66
//---------------------------------------------------------------------
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
attributes = {
44
}

source/codegen/metadata/nidmm_restricted/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-DMM API metadata version 26.0.0d64
2+
# This file is generated from NI-DMM API metadata version 26.0.0d90
33
config = {
44
'additional_headers': {
55
'custom/ivi_errors.h': [
66
'service.cpp'
77
]
88
},
9-
'api_version': '26.0.0d64',
9+
'api_version': '26.0.0d90',
1010
'c_function_prefix': 'niDMM_',
1111
'c_header': 'nidmm.h',
1212
'close_function': None,

0 commit comments

Comments
 (0)