Crash: YogaLayoutableShadowNode.cpp: function layout: assertion failed (YGNodeGetOwner(childYogaNode) == &yogaNode_)
Open
Nobody has claimed this yet.
Needs: Attention
Needs: Repro
- Dominant language
- C++
- Stars
- 127k
- Forks
- 25.3k
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 4
Description
Description
- There is some sort of crash when ui is rendered
Steps to reproduce
- Use conditional rendering for view to display ui based on condition (not sure though what is causing this)
Note: it is working fine on 0.77 though once upgraded then facing this issue
import React from 'react';
import { View, StyleSheet } from 'react-native';
import { t } from '../i18n';
import { ProgressBar } from '@ui-kitten/components';
import { TPhoto } from '../types';
import { Colors } from '../theme';
import AppLightButton from './AppLightButton';
import Upload from '../theme/icons/Upload.svg';
import AppText from './AppText';
type Props = {
image: TPhoto;
retryUpload: boolean;
onRetryUpload: (image: TPhoto) => void;
currentImageIndex: number;
totalImages: number;
};
const ImageUploadProgress = ({ image, retryUpload, totalImages, currentImageIndex, onRetryUpload }: Props) => {
return (
<View style={styles.photoUpload}>
<View style={styles.uploadTitle}>
<AppText style={styles.uploadTitleText}>
{t('common._uploading-images', {
count: currentImageIndex,
total: totalImages,
})}
</AppText>
{image.uploadStatus === 'completed' ? (
<AppText style={styles.uploadTitleTextComplete}> - {t('common.complete')} </AppText>
) : (
<View />
)}
{image.uploadStatus === 'failed' || image.uploadStatus === 'uploading' ? (
<View>
<AppText style={styles.uploadTitleTextFailed}>
{image.uploadStatus === 'failed' ? `- ${t('common.failed')}` : ''}
</AppText>
{retryUpload && (
<AppLightButton
text={t('common.retry')}
buttonIcon={<Upload width={10} fill={Colors.warn} />}
onPress={() => onRetryUpload(image)}
style={styles.stepButton}
textStyle={styles.stepButtonText}
/>
)}
</View>
) : (
<View />
)}
</View>
<ProgressBar
progress={image.uploadStatus === 'completed' ? 1 : image.progress}
size="medium"
style={styles.progressBarStyle}
status={
image.uploadStatus === 'failed' ? 'danger' : image.uploadStatus === 'completed' ? 'success' : 'info'
}
/>
</View>
);
};
export default ImageUploadProgress;
const styles = StyleSheet.create({
photoUpload: { marginVertical: 20 },
uploadTitle: { flexDirection: 'row', justifyContent: 'space-between' },
uploadTitleText: {
fontSize: 14,
fontFamily: 'ProximaNova-Regular',
textAlign: 'center',
textAlignVertical: 'center',
},
uploadTitleTextFailed: {
fontSize: 14,
fontFamily: 'ProximaNova-Bold',
textAlign: 'center',
textAlignVertical: 'center',
color: Colors.error,
},
uploadTitleTextComplete: {
fontSize: 14,
fontFamily: 'ProximaNova-Bold',
textAlign: 'center',
textAlignVertical: 'center',
color: Colors.success,
},
progressBarStyle: {
marginTop: 5,
},
stepButton: {
height: 25,
width: 70,
backgroundColor: Colors.orangeTransparent,
borderColor: Colors.warn,
},
stepButtonText: { fontSize: 10, fontFamily: 'ProximaNova-Bold', height: 10, color: Colors.warn },
});
React Native Version
0.79.4
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
- There is no output. The app closes without any error
Stacktrace or Logs
/__w/react-native/react-native/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp:701: function layout: assertion failed (YGNodeGetOwner(childYogaNode) == &yogaNode_)
MANDATORY Reproducer
https://github.com/facebook/react-native
Screenshots and Videos
- The app crashes abruptly no warning nothing. Log found in android studio
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp at line 701 and reproduce the crash on Android with React Native 0.79.4. Compare conditional-rendering states around the supplied ImageUploadProgress example, then narrow the layout state that violates the Yoga owner assertion. Done means the triggering case is understood and the abrupt assertion crash is resolved or clearly reduced to a minimal reproducer.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, cpp, react-native
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100